20220228 1601. 最多可達成的換樓請求數目
方法一:dfs 列舉
列舉所有換樓請求的選擇與不選擇兩種情況,最後判斷是否滿足題意,時間複雜度為 o(2 ^ m),m 為請求個數,依題意 m <= 16,符合要求。
1 #include 23const
int n = 25;4
5class
solution
17return
x; 18}
19 b[o] = 1
;20 res = dfs(o + 1, x + 1
, n, m);
21 b[o] = 0
;22 res = max(res, dfs(o + 1
, x, n, m));
23return
res;24}
25int maximumrequests(int n, vectorint>>&requests)
32 };
其實不用轉換為二維陣列,可以節省空間,並且 dfs 過程中就可以維護是否滿足條件而不需要最後用 for 迴圈判斷,**有優化空間。
方法二:二進位制位運算列舉
由於對於請求只有選擇與不選擇兩種可能,使用二進位制位運算,會大幅精簡**,但需要再最後用 for 迴圈判斷是否滿足條件,故時間複雜度會達到 o(n * 2 ^ m)。
1const
int n = 25;2
3class
solution
18return
ans;19}
20 };
其他:最小費用最大流
由於資料量並不大,用網路流有點殺雞用牛刀了。
leetcode刷題之旅(39)組合總和
給定乙個無重複元素的陣列candidates和乙個目標數target,找出candidates中所有可以使數字和為target的組合。candidates中的數字可以無限制重複被選取。說明 輸入 candidates 2,3,6,7 target 7,所求解集為 7 2,2,3 輸入 candida...
leetcode刷題 40組合總和2
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。此題思路與39題類似,利用回溯的方式,但是難點在於不能重複利用。避免重複要讓同一層級不出現相同的元素,卻...
LeetCode刷題筆記 40 組合總和 II
給定乙個陣列 candidates 和乙個目標數 target 找出 candidates 中所有可以使數字和為 target 的組合。candidates 中的每個數字在每個組合中只能使用一次。說明 示例 1 輸入 candidates 10,1,2,7,6,1,5 target 8,所求解集為 ...