Two Sum的变种。增加了新的条件,给出的数组元素是按照增序排列的。在新条件下不需要再用到HashMap,一定要利用好“sorted in ascending order”这个新特性。思路:Two Pointers + Binary Search。从首尾开始逼近我们想要的值……同时注意需要存放的下标的值。
Given an array of integers that is already sorted in ascending order, find two numbers such that they add up to a specific target number.
The function twoSum should return indices of the two numbers such that they add up to the target, where index1 must be less than index2. Please note that your returned answers (both index1 and index2) are not zero-based.
You may assume that each input would have exactly one solution and you may not use the same element twice.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
public class Solution {
public int[] twoSum(int[] numbers, int target) {
int[] res= new int[2];
int lefti, righti;
lefti=0;
righti=numbers.length-1;
while(lefti<righti){
int temp=numbers[lefti]+numbers[righti];
if(temp==target){
res[0]=lefti+1;
res[1]=righti+1;
break;
}else if(temp<target){
lefti++;
}else if(temp>target){
righti--;
}
}
return res;
}
}

本文介绍了一种针对已排序数组实现两数之和问题的高效算法。利用双指针结合二分查找的方法,在O(n)的时间复杂度内找到目标值对应的两个数的下标。
3497

被折叠的 条评论
为什么被折叠?



