题目:
最开始采用暴力解法,两个for循环遍历所有组合形式,时间复杂度为O(n2),代码省略。
进一步学习,采用hash表存储,空间换时间,时间复杂度为O(n),空间复杂度为O(n);
将数组放入hash表中,利用for循环遍历数字中元素并从hash表中找到对应的数。因为从hash表中取数的时间复杂度为O(1),所以整体的复杂度为O(n);
代码如下:
class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { int n = nums.size(); vector<int> v; map<int, int> m; for(int i = 0; i < n; ++ i) { if(m.find(target - nums[i]) != m.end()) { v.push_back(m[target - nums[i]]); v.push_back(i); break; } m[nums[i]] = i; } return v; } };