劍指offerNo42. 和爲S的兩個數字(Java)

題目描述:

輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。

對應每個測試案例,輸出兩個數,小的先輸出。

思路:

  • 用兩個指針,第一個指針start從左至右開始遍歷,第二個指針end從後至前開始遍歷
  • 如果(start+end)<sum,則start++;
  • 如果(start+end)>sum,則end--;
  • 如果相等,那麼返回第一對等於sum的值。因爲兩個數的差值越大,乘積越小。

代碼:

package offer01;

import java.util.ArrayList;

public class TestNo42 {
    public static void main(String[] args) {
        int[] a = {1,2,3,4,5,6};
        System.out.println(new TestNo42().FindNumbersWithSum(a,6));
    }
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> list = new ArrayList<>();
        if(array == null||array.length<2){
            return list;
        }
        int i = 0,j=array.length-1;
        while (i<j){
            if (array[i] + array[j] == sum){
                list.add(array[i]);
                list.add(array[j]);
                return list;
            } else if(array[i] + array[j] >sum){
                j--;
            }else{
                i++;
            }
        }
        return list;
    }
}

 

要繼續長成厲害的大人,永遠是萬事勝意的女孩 ..

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章