題目:輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。
題目所給出的陣列是遞增陣列,所以我們採用雙指標,乙個指向陣列頭部,乙個指向尾部。如果頭尾陣列值相加小於sum,那麼頭指標向右移動;如果大於sum,那麼尾指標向左移動;如果相等,停止迴圈,此時的結果即為所求結果(因為相差越遠,乘積越小,所以第一次相加等於sum的首尾值即為所求值);如果直到頭尾指標相遇,即left=right依舊沒有相等的情況出現,那麼返回0。
注:當然,如果大家懷疑相差越遠,乘積越小,也可以把所有組合列出來,用乘積來判別。
採用相差越遠,乘積越小來判別的方法
vector<
int>
findnumberswithsum
(vector<
int> array,
int sum)if(
(array[left]
+array[right]
)left++
;else
right--;}
if(left>=right)
return res;
}}
採用把所有組合列出來,用乘積來判別的方法
vector<
int>
findnumberswithsum
(vector<
int> array,
int sum)if(
(array[left]
+array[right]
)left++
;else
right--;}
if(left>=right)
return rest;
else
} rest.push_back (res[cnt]
.first )
; rest.push_back (res[cnt]
.second)
;return rest;}}
}
劍指offer 和為S的兩個數字
esmp esmp 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 esmp esmp 對應每個測試案例,輸出兩個數,小的先輸出。esmp esmp 首先,先考慮在遞增排序的陣列中找到兩個和為s的數字。這個思路...
劍指offer 和為S的兩個數字
題目描述 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。ps 拋物線開口向下,找到的第一組 相差最大的 就是乘積最小的,不需要比較 class solution in...
劍指offer 和為s的兩個數字
輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,是的他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。雙指標,乙個從左向右遍歷,乙個從右向左遍歷。coding utf 8 class solution deffindnum...