two-sum 问题

2018-11-12  本文已影响0人  小码弟

给定一个数组和一个整型,请在找到数组中的两个下标,使得对应下标的和等于给定的整型值。小的下标在前,较大下标在后

如果数组有序就好办了,双指针向中间逼近。但是数组无序, 两重循环肯定不是好方法。换一个思路,使用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;
}
上一篇 下一篇

猜你喜欢

热点阅读