和為S的數字及高階

2021-08-04 02:09:30 字數 1116 閱讀 6795

題目:

在乙個遞增排序的陣列中,找到兩個數字和為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...