和为S的两个数字
和为S的两个数字
http://www.nowcoder.com/questionTerminal/390da4f7a00f44bea7c2f3d19491311b
利用双指针,缩小区间,因为是排序数组,所以找到的一定是积最小的。
import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list=new ArrayList<>(); int ahead=0,behind=array.length-1;//定义两个指针 while(behind>ahead){ int cursum=array[ahead]+array[behind]; if(cursum==sum){//找到当前和 list.add(array[ahead]); list.add(array[behind]); break; }else if(cursum>sum){//当前和大于目标和,第二个指针左移 behind--; }else{//当前和小于目标和,第一个指针右移 ahead++; } } return list; } }