1. 程式人生 > >牛客網刷題之和為S的兩個數字

牛客網刷題之和為S的兩個數字

題目描述:

這裡寫圖片描述

解題思路:

  既然是排序的,當然優先考慮二分法,分別用兩個指標分別指向左邊第一個位置和右邊第一個位置,左右逼近,當左邊的位置大於等於右邊的位置即可。題目要求是先輸出乘積小的,由於我們每次先得到的都是一個小點的數和一個大點的數,故而和相等的情況下,乘積必定是最小的。

題解:

public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
        ArrayList<Integer> list = new ArrayList<>();
        if
(array == null || array.length < 2){ 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){ right--; }else{ left++; } } return list; }

ac結果:

這裡寫圖片描述