题目描述

1. 两数之和

给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

示例:

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

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

 

解答:

解答1:

个人思路:

定义两个指针,一个指向顶部,一个指向尾部,尾部不断向头部前进,指针重叠时,头部指针加1,尾部指针回到尾部,继续。

直到所指两个元素加起来等于target为止。

216 ms

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    let start = 0;
    let end = nums.length-1
    while(start <= end){
        if(start === nums.length-1){
            break
        }
        if(start === end){
           start++
            end = nums.length-1
           }
        if(nums[start]+nums[end] === target){
           return[start,end]
        }
        end--
    }
};

 

 

解答2:

已有的最快的解答:

还是hash表运行快,定义一个空对象,遍历数组,如果target减去当前元素得到的值,已经是对象的key了,就输出 [对象的key对应的value(索引),当前元素索引];

如果得到的值不是对象的key,就把这个 元素 作为对象的key,元素索引作为对应的value。

44ms

var twoSum = function (nums, target) {
  let obj = {};
  for (var i = 0; i < nums.length; i++) {
    if (obj[target - nums[i]] !== undefined) {
      return [obj[target - nums[i]], i];
    }
    obj[nums[i]] = i;
  }
};

 

内容来源于网络如有侵权请私信删除
你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!