题目描述:
题目要点
1,该数组是按照升序排列的
2,在数组中有唯一一组值满足二者相加等于target
3,这两个数值的下标不能相等
4,返回值不是下标,而是下标+1
解法一
思路:前面做过一道十分相似的题,唯一的区别在于上一道题的数组并没有说明是按顺序排列的,所以要想有比较好的解法,必然要在这一点上展开思考。由于该数组是按升序排列的,那么可以将数组的第一个元素和最后一个元素相加,如果结果大于target那么就放弃最后一个值选倒数第二个值相加,反之放弃第一个值选择第二个值相加,专业一点来说,这叫首尾指针碰撞法
代码:
/**
* @param {number[]} numbers
* @param {number} target
* @return {number[]}
*/
var twoSum = function(numbers, target) {
var len=numbers.length-1;
var i=0;
while((numbers[i]+numbers[len])!=target){
if((numbers[i]+numbers[len])>target){
len--;
}
else{
i++;
}
}
if(i!=len){
return [i+1,len+1];
}
};
好像暂时还没想到其他比较好的解法.....