题目描述
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; } };
内容来源于网络如有侵权请私信删除
- 还没有人评论,欢迎说说您的想法!