從n個數中選擇k個數

2021-10-25 22:32:47 字數 591 閱讀 6744

這是組合問題,組合問題有幾種寫法,且時間複雜度位o(n^2)

1、暴力迴圈,適用於固定的k

比方從7個數中找兩個數

int main()

; sort(nums.begin(), nums.end());

int count = 0;

for (int i = 0; i < nums.size(); ++i)

}cout << count;

}

2、當前數選不選,遞迴寫法

vectorans;

int countt = 0;

void dfs(vector&nums, int s, int l)

if (s < nums.size())

}int main()

; sort(nums.begin(), nums.end());

dfs(nums, 0, 0);

cout << countt;

}

這麼寫跟之前的combination 寫法完全一樣,甚至還不好去重

3、之前combination的寫法

從m個數中選擇n個數的實現

從m個數中選出n個數來 0 n m 要求n個數之間不能有重複,其和等於乙個定值k。求一段程式,羅列所有的可能。例如備選的數字是 11,18,12,1,2,20,8,10,7,6 和k等於 18 那麼組合的可能有 18 8,10 2,20 12,6 11,7 11,1,6 1,10,7 12,2,8 ...

用敗者樹從N個數中選擇最大的k個數字

20 21 24 29 36 45 56 69 84 101 120 141 164 189 16 45 76 109 144 181 20 61 104 149 196 45 96 149 4 61 120 181 44 109 176 45 116 189 64 141 20 101 184 6...

從M個數中選擇前N大的數

如果對m個數字全排列,1 用簡單排序演算法,例如氣泡排序,時間複雜度m m 2 用快速排序 最壞時間複雜度度蛻化為m m 堆排序歸併排序 平均時間負責度為m logm 此處,需要選擇前n大的數,用氣泡排序,迴圈次數為n,時間複雜度為m n 如果是海量資料呢?筆試時經常碰到這樣類似的題目 從100w個...