題目:
在乙個遞增排序的陣列中,找到兩個數字和為s,如果有多組,則返回乘積最小的那兩個數字。
思路:排序好的陣列。用兩個指標p,q分別指向首尾兩個數字。如果和小於s,則指標p向右移動一位繼續比較。
如果和大於s,則指標q向左移動一位繼續比較。
如果相等,則p和q分別向右和左移動一位尋找下一組數字。
class solution
else if(sum_pq < sum)
else
p++;
q--;}}
return res;
}};
進一步分析:對於乙個和為s的兩個數,肯定是兩個數之間相差越大越好。所以其實找到的第一組數字就是解。
class solution
else if(sum_pq < sum)
else
}return res;
}};
高階題目:
輸入乙個正數s,列印出所有和為s的連續正數序列(至少含有兩個數)。例如輸入15,由於 1+2+3+4+5= 4+5+6=7+8=15,所以有三個序列,均需儲存。
思路:與上題類似,定義兩個指標p,q 分別指向當前正數序列的最左端和最右端。q的範圍至多到s的一半,q<=(s+1)/ 2,參考s = 5, 序列為 2,3.
用sum_temp儲存當前序列之和。如果sum_temp小於s,q向後移動一位。當sum_temp大於s,需要右移p,也要重新計算當前序列之和。為了避免重新累加計算序列和,可以充分利用前面的sum_temp,即用sum_temp - p得到新的sum_temp,之後再更新p為p+1。
class solution
if(sum_temp > sum)
if(sum_temp == sum)
}return res;
}vectorfindonesolution(int p , int q)
return res;
}};
57 和為S的數字
1 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。2 小明很喜歡數學,有一天他在做數學作業時,要求計算出9 16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100 至...
57 和為S的數字
題目一 和為s的兩個數字 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得他們的和正好是s,如果有多對數字的和等於s,輸出兩個數的乘積最小的。輸出描述 對應每個測試案例,輸出兩個數,小的先輸出。測試序列 1 功能測試 陣列中存在和為s的兩個數 陣列中不存在和為s的兩個數 2 特殊輸入測試...
和為s的兩個數字 和為s 的連續正數序列
題目1 輸入乙個遞增排序的陣列和乙個數字s,在陣列中查詢兩個數,使得它們的和正好是s。如果有多對,輸出所有對。python題解def find num with sum data,sum hash set set res for idx,num in enumerate data another n...