1. 程式人生 > >知識遷移能力-和為S的兩個數字

知識遷移能力-和為S的兩個數字

和為S的兩個數字

題目描述

輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,是的他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。
輸出描述:

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

import java.util.ArrayList;
public class Solution {
    /*解題思路:查詢
    數列滿足遞增,設兩個頭尾兩個指標i和j, 
    若ai + aj == sum,就是答案(距離越遠乘積越小) 
    若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的數已是不可能),j -= 1 
    若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 後面的數已是不可能),i += 1 
    O(n)
    */
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list=new ArrayList<Integer>(); if(array==null||array.length<2){ return list; } int i=0; int 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; } }