题目描述:
Given an array of integers,
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.
Input: numbers={2, 7, 11, 15}, target=9
Output: index1=1, index2=2
思路:先排序数组并且在数组左右两边各放一个标记,不停将标记数字相加,若大于目标则将右坐标向前推一位(因为排过序所以等于缩小二者的和),反之则将左坐标向后推一位(增大二者的和)。还有一点很重要的是要记录排序前数组的下标,排序后数组会发生改变。
public class Two_Sum {
public static int result[]=new int[2];
public static int[] twoSum(int array[],int target)
{
HashMap<Integer,Integer> map = new HashMap<Integer,Integer>();
for(int i=0;i<array.length;i++)
{
map.put(array[i], i);
}
Arrays.sort(array);
int start=0;
int end=array.length-1;
while(end>start)
{
if(array[end]+array[start]==target)
{
result[0]=Math.min(map.get(array[start])+1,map.get(array[end])+1);
result[1]=Math.max(map.get(array[start])+1,map.get(array[end])+1);
break;
}
if(array[end]+array[start]>target)
{
end--;
}
if(array[end]+array[start]<target)
{
start++;
}
}
return result;
}
public static void main(String[] args) {
int numbers[]={2,11,7,15,8,4};
int target=11;
System.out.println(Arrays.toString(twoSum(numbers,target)));
}
}