給定一個整數(shù)數(shù)組 nums 和一個目標值 target,請你在該數(shù)組中找出和為目標值的那 兩個 整數(shù),并返回他們的數(shù)組下標。
你可以假設每種輸入只會對應一個答案。但是,你不能重復利用這個數(shù)組中同樣的元素。
示例:
給定 nums = [2, 7, 11, 15], target = 9
因為 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
}
};
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/two-sum
著作權歸領扣網絡所有。商業(yè)轉載請聯(lián)系官方授權,非商業(yè)轉載請注明出處。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;//聲明一個vector作為結果的返回值
if (nums.size() < 2)
return result;
unordered_map<int, int> m;//創(chuàng)建unordered_map命名為m
//unordered_map可理解為約等于哈希表,所以速度非??? for (int i = 0; i < nums.size(); i++)
{
m.insert(make_pair(nums[i], i));
//將nums[i]和i作為key和value放入所創(chuàng)建的unordered_map中
unordered_map<int, int>::iterator iter = m.find(target-nums[i]的);
//創(chuàng)建一個iterator(迭代器)命名為iter
//該iter為當前m中key為target-nums[i]的iterator(unordered_map中的key唯一)
if (iter != m.end() && iter->second != i)
{//iter != m.end() 表示iter = m.find(x)存在
//iter->second != i 表示找到的數(shù)不是自己
result.push_back(i);//返回自己的value
result.push_back(iter->second);//返回目標value
return result;
}
}
return result;
}
};