【刷算法】LeetCode- 两数之和

问题形貌

给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

你能够假定每一个输入只对应一种答案,且一样的元素不能被反复应用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

由于 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

剖析

第一觉得是和我之前做过的题相似,就想先排序然后摆布指针来夹逼,背面一想,排序以后数组下标就乱了,所以这个要领不可

考虑到能够运用一个map,存储的键值对为:target-val:index,也就是关于数组中的每一个数字,存下它和target的差异以及它的下标。

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
  if(nums === null || nums.length < 2)
    return [];
  var map = {};
  for(var i = 0;i < nums.length;i++) {
    map[target-nums[i]] = i;
  }
  
  for(var i = 0;i < nums.length;i++) {
    var cur = nums[i];
    if(map[cur] && map[cur] !== i)
      return [i, map[cur]];
  }
  
  return [];
};
    原文作者:亚古
    原文地址: https://segmentfault.com/a/1190000015800735
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞