题目来源:leetcode-cn.com
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。
你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
答:
这里我使用的是时间复杂度为O(N)的方法,从数组的头和尾相加判断,比给出数小,头部指针向后移动
(用这个方法返回值是不对的,因为它排序后返回的就是新的下标了)
代码如下:
var twoSum = function(nums, target) {
var i,j
n=nums.length;
var sortNum = (a,b) => a-b;
var numArr = nums.sort(sortNum)
for(i=0,j=n-1;i<j;){
if(nums[i]+nums[j]==target){
return {i,j}
}else if(nums[i]+nums[j]<target){
i++
}else {
j--
}
}
};
方法二:
const twoSum = (nums, target) => {
let mapObj = {};
let res = [];
nums.forEach((e, i) => {mapObj[e] = i});
for(let i=0;i<nums.length;i++) {
let j = mapObj[target - nums[i]];
if(j && j !== i) {
res = [i, j];
break;
}
}
return res;
};
这个使用了另一种思路,将值存入新数组的下标再进行判断