和爲S的兩個數字

題目描述

輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,若是有多對數字的和等於S,輸出兩個數的乘積最小的。
輸出描述: 對應每一個測試案例,輸出兩個數,小的先輸出。java

思路

符合條件的答案中,距離最遠的一對數字的乘積最小(周長固定的矩形中正方形面積最大),設置左右指針往中間逼近。
時間複雜度O(n),空間複雜度O(1)。數組

代碼

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        if(array == null || array.length == 0)    return list;
        int left = 0, right = array.length - 1;
        int curr = 0;
        while(left < right) {
            curr = array[left] + array[right];
            if(curr == sum) {
                list.add(array[left]);
                list.add(array[right]);
                break;
            } else if(curr < sum) {
                left++;
            } else {
                right--;
            }
        }
        return list;
    }
}
相關文章
相關標籤/搜索