题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
思路:
方法1 :暴力遍历,遍历每一个元素以及其后面的所有元素,找到符合条件的;
时间复杂度:n + n -1 + … + 1 = O(n^2); 空间复杂度:O1
方法2 : 如果在遍历的过程中,记录下来我遍历的值及其对应的索引,在下一次遍历到对应元素的时候,通过target - data找到这个元素,就能够实现一次遍历;这需要借助到hash映射;
代码:
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
int m = nums.size();
vector<int> ret(2,0);
unordered_map<int,int> table;
for(int i = 0; i < m; i++)
{
if(table.count(target-nums[i]) > 0){
ret[0] = i,ret[1] = table[target-nums[i]];
return ret;
}
table[nums[i]] = i;
}
return ret;
}
};