Given an array of integers, return indices of the two numbers such
that they add up to a specific target.You may assume that each input would have exactly one solution.
Example: Given nums = [2, 7, 11, 15], target = 9,
Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
题意:给定一个数组,求解数组中的两个值相加等于target。且数组中的这两个值对唯一。
JS代码1:
var twoSum = function(nums, target) {
var num2=0;
var res=[];
var index;
if(nums.length<2)
{
return res;
}
for(var i=0,len=nums.length;i<len;i++)
{
num2=target-nums[i];
index=nums.indexOf(num2,i+1);
if(index!==-1)
{
res[0]=i;
res[1]=index;
return res;
}
}
return res;
};
思路:依次遍历数组中每个元素,分别求出target-nums[i]的值,利用JS中的indexOf(nums[i],i+1)函数从i+1的位置开始索引target-nums[i],找到返回下标值。时间复杂度为0(n*m).空间复杂度为0(1)。
JS代码2:
var twoSum = function(nums, target) {
var numsSort=nums.slice(0);
var num2=0;
var res=[];
var index;
var i=0,j=nums.length-1;
if(nums.length<2)
{
return res;
}
var sortNums=function(a,b){
return a-b;
};
nums.sort(sortNums);//升序排列nums
while((nums[i]+nums[j]!==target)&&(i<j))
{
if(nums[i]+nums[j]>target)
{
j--;
}
if(nums[i]+nums[j]<target)
{
i++;
}
}
if((nums[i]+nums[j])===target)
{
res[0] =numsSort.indexOf(nums[i]);
res[1] =numsSort.lastIndexOf(nums[j]);
}
return res;
};
思路:现将nums数组排序,然后从前后两端线性查找nums[i]+nums[j])===target的两个元素。此题注意事项如下:
1.数组最后一个元素是nums[nums.length-1];
2.深拷贝是复制,例如: var numsSort=nums.slice(0);
浅拷贝是引用,例如:var numsSort=nums;
这个千万不能错哟!!!!!!!!!!!!