1. 程式人生 > >[演算法]和為S的兩個數字

[演算法]和為S的兩個數字

題目描述

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

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

思路

定義兩個指標,分別從前面和後面進行遍歷。間隔越遠乘積越小,間隔越近乘積越大,所以最先出現的兩個數乘積最小。

程式碼

import java.util.ArrayList;
public class Solution {
    public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList
<Integer> list = new ArrayList<>(); if(array == null || array.length == 0){ return list; } int left = 0; int right = array.length - 1; while(left < right){ if(array[left] + array[right] == sum){ list.add(array[left]); list.add(array[right]);
return list; }else if(array[left] + array[right] < sum){ left++; }else{ right--; } } return list; } }