輸入兩個整數 n 和 m,從數列1,2,3……n中隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來。
設該演算法為f(m, n),返回乙個陣列集合r
則f(m, n-1)返回集合r1
且f(m-n, n-1)返回集合r2
在r2中的每個陣列中加入元素n,得到r3
則r = r1 + r3
終止條件是n <= 0或m <= 0
利用分治的思想,縮小問題規模,迭代解決問題
m是定值,n是標誌規模的量,所以希望每次縮小n的規模(n-1)
那如何從n-1規模的問題答案中得到n規模的答案呢?
首先,(m, n-1)的答案是(m, n)的答案乙個子集
其次,(m, n)的答案相對(m, n-1)的答案,多出了包含元素n的所有組合
如何求上述包含元素n的所有組合?只需要求出所有不含n且和為m-n的組合,然後各加入乙個n既可
要求不含n,所以問題規模定義為n-1,要求和為m-n,所以引數定為m-n
綜上,得以上演算法
尋找陣列中和為定值的兩個數
題目描述 輸入乙個陣列和乙個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是o n 如果有多對數字的和等於輸入的數字,輸出任意一對即可。例如輸入陣列1 2 4 7 11 15和數字15。由於4 11 15,因此輸出4和11。下面給出這個題的不同解法 注意闡述中數列有序無序...
找出陣列中和為N 1的的所有組合
乙個整數數列,元素取值可能是1 n n是乙個較大的正整數 中的任意乙個數,相同數值不會重複出現。設計乙個演算法,找出數列中符合條件的數對的個數,滿足數對中兩數的和等於n 1。複雜度最好是o n 如果是o n2 則不得分 方法一 排序後,定義兩個指標begin,end分別指向陣列的第乙個和最後乙個元素...
尋找和為定值的數
尋找和為定值的兩個數 include using namespace std include 排序夾逼 時間複雜度為o nlogn n o nlogn 空間複雜度 o 1 void twosum int a,unsigned int length,int sum else void funtest ...