劍指offer-和為S的兩個數
阿新 • • 發佈:2018-12-14
題目如下:
輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。
輸出描述:
對應每個測試案例,輸出兩個數,小的先輸出
解題思路:
- 遍歷陣列中的每一項,對每一項進行如下操作
- 當前項為n1,用S - n1 得到 nextHalf
- 如果nextHalf 小於等於當前值n1,退出迴圈
- 如果nextHalf大於當前值,在陣列中查詢nextHalf
- 如果找到nextHalf,就將n1和nextHalf以及兩者的乘積進行儲存
- 沒有找到nextHalf那就continue當前迴圈
- 最後根據得到結果中的乘積進行過濾
function FindNumbersWithSum(array, sum) { let resArr =[]; for(var i = 0 ;i < sum ; i++){ //和的另一半 let nextHalf = sum - array[i]; //如果和的另一半小於當前值,退出迴圈 if( nextHalf <= array[i] ){ break; }else{ //如果能找到另一半 if( array.indexOf(nextHalf) > -1 ){ resArr.push({ min: array[i], next: nextHalf, mult: array[i] * nextHalf }) } } } if(resArr.length === 0){ return []; } let multArr = resArr.map((val)=>{ return val.mult; }); let index = multArr.indexOf( Math.min(...multArr) ); return [resArr[index].min, resArr[index].next]; }