Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use thesame element twice.
Example:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
方法1:直接暴力求解,时间复杂度为O(n^2),可以AC,代码如下:
vector<int> twoSum(vector<int>& nums, int target) { int len = nums.size(); vector<int>ans; 此方法为暴力,时间复杂度为O(n^2) for (int i = 0; i < len; i++){ int tmp = target - nums[i]; for (int j = i+1; j < len; j++){ if (tmp == nums[j]){ ans.push_back(i); ans.push_back(j); } } }} return ans; }
方法2:利用Hash表求解,先保存每一个元素的下标,时间复杂度为O(n),代码如下:
vector<int> twoSum(vector<int>& nums, int target) { int len = nums.size(); unordered_map<int,int>mapping; vector<int>ans; for (int i = 0; i < len; i++){ mapping[nums[i]] = i;//记录每个元素的下标 } for (int i = 0; i < len; i++){ int tmp = target - nums[i]; if (mapping.find(tmp) != mapping.end() && mapping[tmp] > i) { ans.push_back(i); ans.push_back(mapping[tmp]); break; } } return ans; }