题目要求
给定一个整数数组,返回两个数字的索引,使它们加起来成为一个特定的目标。
假设每个输入只有一个解决方案,并且不会两次使用相同的元素。
输入示例
Example:
Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
思路
1、暴力遍历,两层。能找到答案,但是时间复杂度较高。
2、使用哈希表,根据 nums[i] + nums[j] = target,当前遍历元素已知是nums[i],且目标target已知,所以只要判断**nums[j]**即可。如果nums[j]在哈希表中,那么返回i,j的索引, 否则把[ nums[j], j ] 加入到哈希表中,形式为本身元素为key,元素的索引下标为value。
主要代码 c++
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int,int> map; // 构建哈希表,unordered_map的实现就是哈希
vector<int> ans;
for(int i=0;i<nums.size();++i)
{
int complement = target - nums[i];
if(map.count(complement)>0) // 如果“nums[j]”在哈希表中
{
ans.push_back(map[complement]); // 返回“nums[i],nums[j]”的索引,即整数的下标
ans.push_back(i);
return ans;
}
map.insert(make_pair(nums[i],i)); // 哈希表的存储形式:key(整数):value(整数对应的下标)
}
return ans;
}
};