尋找和為定值的數

2021-07-31 21:58:08 字數 1228 閱讀 5619

//尋找和為定值的兩個數

#include

using

namespace

std;

#include

排序夾逼 時間複雜度為o(nlogn+n) = o(nlogn),空間複雜度:o(1)

void twosum(int a, unsigned

int length, int sum)

else

}}void funtest()

; twosum(array, sizeof(array)/sizeof(array[0]), 15);

}int main()

解法一:n問題轉換為n-1問題
//尋找和為定值的多個數

//解法一:n問題轉換為n-1問題

list

list1;

void sumofknumber(int sum, int n)

list1.push_front(n);

sumofknumber(sum-n, n-1); //放n,前n-1個數填滿sum-n

list1.pop_front();

sumofknumber(sum, n-1); //不放n,前n-1個數填滿sum

}void funtest()

int main()

執行結果:

解法二:回溯剪枝:

//解法二:回溯剪枝

//輸入t和r, 嘗試wk

void sumofknumber(int t, int k, int r, int& m, bool& flag, bool* x)

cout

}}void search(int& n, int& m)

bool f = false;

sumofknumber(0, 1, sum, m, f, x);

if(!f)

cout

<

free(x);

}void funtest()

int main()

執行結果:

尋找和為定值的多個數

程式設計求解 輸入兩個整數 n 和 m,從數列1,2,3.n 中 隨意取幾個數,使其和等於 m 要求將其中所有的可能組合列出來。include includeusing namespace std 全域性變數 listlist1 從1,2.n找到和為sum的數字 void find factor i...

尋找和為定值的多個數

輸入兩個整數n和sum,從數列1,2,3 n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。注意到取n,和不取n個區別即可,考慮是否取第n個數的策略,可以轉化為乙個只和前n 1個數相關的問題。如果取第n個數,那麼問題就轉化為 取前n 1個數使得它們的和為sum n 對應的 語句就...

尋找和為定值的兩個數

尋找和為定值的兩個數 給定乙個陣列 無序或者有序,兩種情況都要考慮 找出和為m的兩個數。最多時間複雜度能有多少?陣列有序的情況,在時間複雜度上我們就省去了排序的o nlogn 我們使用兩端指標掃瞄法是比較簡單的,時間複雜度為o n 空間複雜度為o 1 如下圖所示 然後,判斷它們指向的值之和sum是否...