题目描述:
给出一个整数数组,请在数组中找出两个加起来等于目标值的数,
你给出的函数twoSum 需要返回这两个数字的下标(index1,index2),需要满足 index1 小于index2.。注意:下标是从1开始的
假设给出的数组中只存在唯一解
例如:
给出的数组为 {20, 70, 110, 150},目标值为90
输出 index1=1, index2=2
解题分析:
注意数组不是有序的,所有用双指针不太好。所以直接用map来做,key是target-当前值,value是当前值下标,所以如果某个值存在map的key里,那么这个值+map里下标对应的值便等于target。
class Solution {
public:
/**
*
* @param numbers int整型vector
* @param target int整型
* @return int整型vector
*/
vector<int> twoSum(vector<int>& numbers, int target) {
// write code here
unordered_map<int,int> numbersMap;
for(int i=0; i<numbers.size(); ++i){
if(numbersMap.count(numbers[i])){
return {numbersMap[numbers[i]]+1, i+1};
}
numbersMap[target-numbers[i]]=i;
}
return {0,0};
}
};