给定一个数组和一个整型,请在找到数组中的两个下标,使得对应下标的和等于给定的整型值。小的下标在前,较大下标在后
如果数组有序就好办了,双指针向中间逼近。但是数组无序, 两重循环肯定不是好方法。换一个思路,使用hash记录值和下标, 由于可能存在重复的值,因此将数组的值作为键,对应下标作为值,这样就能保证存储的是最接近的位置。
接下来遍历数组,如果在map中找到target-A[i]的键,就返回这个键对应的值(即符合条件的下标)。
vector<int> two_sum(vector<int> numbers, int target)
{
vector<int> res(2);
if(numbers.size() == 0)
return res;
map<int, int> m;
for(int i = 0; i<numbers.size(); ++i)
m[numbers[i]] = i;
for(int i = 0; i<numbers.size(); ++i)
{
int interval = target - numbers[i];
if(m.find(interval) != m.end() && m[interval] > i)
{
res[0] = i+1;
res[1] = m[interval] + 1;
break;
}
}
return res;
}
网友评论