LeetCode:1.两数之和(C++实现)

1.暴力枚举

大部分人刚开始的做法可能是二次遍历数组(下面有代码实现),从而找到两个对应的值的和为target,但是时间复杂度就是:O(n^2),不满足进阶条件。

如果是刚开始学习数据结构与算法的小伙伴则不用过于纠结进阶条件,能过就行

class Solution {
public:
    vector twoSum(vector& nums, int target) {
        int n = nums.size();
        for (int i = 0; i < n; ++i) {
            for (int j = i + 1; j < n; ++j) {
                if (nums[i] + nums[j] == target) {
                    return {i, j};
                }
            }
        }

        //遍历完全后,仍没有找到符合的索引,则返回空数组即可
        return {};
    }
};

2.哈希表

利用哈希表可让搜索时间复杂度从O(n)->O(1),而且哈希表还有一个好处就是让我们不用完全遍历两次数组,进一步提高效率。

class Solution {
public:
    vector twoSum(vector& nums, int target) {
        //创建哈希表
        unordered_maphashTable;
        
        //遍历数组
        for(int i=0;isecond,i};
            }
            
            //但如果没找到就插入哈希表中,以便后续查找
            hashTable[nums[i]]=i;
        }
        
        return {};
    }
};

你可能感兴趣的:(算法,数据结构,leetcode,哈希表)