描述:
解法一:
package question41;
import java.util.ArrayList;
public class TwoNumbersWithSum {
public static ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList< Integer> list=new ArrayList<Integer>();
int i=0;
int j=array.length-1;
while (i<j) {
int curSum=array[i]+array[j];
if (curSum==sum) {
list.add(array[i]);
list.add (array[j]);
return list;
}else if (curSum>sum) {
j--;
}else {
i++;
}
}
return list;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int arr[]={1,2,4,7,8,11,15};
ArrayList< Integer> list=FindNumbersWithSum(arr, 15);
System.out.println(list);
}
}
解法二: 利用HashMap
package question41;
import java.util.HashMap;
public class twoSum {
public static void main(String[] args) {
int numbers[]={1,2,4,7,8,11,15};
int a[]=twoSum(numbers, 15);
for (int i : a) {
System.out.println(numbers[i-1]);
}
}
public static int[] twoSum(int[] numbers, int target) {
int n = numbers.length;
int[] result = new int[2];
//map里面放 键为target-每个数的结果 值为下标
//每次放入的时候看是否包含 当前值
//有的话说明当前值和已包含的值下标的那个元素为需要的结果
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
for(int i=0;i<n;i++){
if(map.containsKey(numbers[i])){
result[0] = map.get(numbers[i])+1;
result[1] = i+1;
break;
}
else{
map.put(target - numbers[i], i);
}
}
return result;
}
}
测试结果: