利用双指针,缩小区间,因为是排序数组,所以找到的一定是积最小的。

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;
    }
}