LeetCode-1
2019/03/31
今天开始在LeetCode上刷题,第一道只会普通的解法,先记录下来,以后有新的想法再改进。
时间复杂度O(n2),空间复杂度O(1)
1 vector<int> twoSum(vector<int>& nums, int target) { 2 vector<int> returnVector; 3 4 for (vector<int>::size_type i = 0; i < nums.size(); ++i) 5 { 6 for (vector<int>::size_type j = i + 1; j < nums.size(); ++j) 7 { 8 if (target == nums[i] + nums[j]) 9 { 10 returnVector.push_back(i); 11 returnVector.push_back(j); 12 return returnVector; 13 } 14 } 15 } 16 17 return returnVector; 18 }
执行效果如下:
-----------------------------------------------------------2019/05/08更新----------------------------------------------------------------------
方法二:在遍历整数数组时将元素插入哈希表,利用哈希表查找时间复杂度为O(1)的特性,减少了另一个值下标的查找时间。
时间复杂度O(n),空间复杂度O(n)。
1 vector<int> twoSum(vector<int>& nums, int target) { 2 vector<int> returnVector; //保存对应值数组下标 3 map<int, int> numIndexMap; //数组元素值nun到对应下表的map 4 5 for (int i = 0; i < nums.size(); ++i) { 6 if (numIndexMap.find(target - nums[i]) == numIndexMap.end()) { //查看target-num不在map中 7 numIndexMap[nums[i]] = i; //插入当前元素 8 } else { 9 returnVector.push_back(numIndexMap[target - nums[i]]); 10 returnVector.push_back(i); 11 return returnVector; 12 } 13 14 } 15 16 return returnVector; 17 }