【leetcode】210. 課程表 II
1、概念
官方解釋:“定義一系列的演算法,把每一個演算法封裝起來, 並且使它們可相互替換”。
實現效果:根據環境類的不同執行不同的實現策略,減小演算法多樣性對程式碼結構的衝擊。
目的:當客戶端傳入的物件不變,但是要執行不同的演算法邏輯,你需要寫大量的if-else來實現。
策略模式的出現就是為了解決這種情況。並且拓展起來也非常方便。
具體結構:
環境類:可以理解為傳入的物件,用來操作策略的上下文物件。
抽象策略類:定義策略的抽象方法。
實現策略類:策略抽象方法的具體實現類,可以有很多種。
2、具體實現
略,百度有大把案例。
3、區別
我學習策略模式時,感覺和方法模板模式很相似,所以區分一下他們的不同點。
-
策略模式:入參物件相同;大多對呼叫鏈路的整個演算法實現做修改。
-
模板方法模式:入參物件不同;只對呼叫鏈路的部分做修改在子類實現。
相關推薦
【leetcode】210. 課程表 II
int* findOrder(int numCourses, int** prerequisites, int prerequisitesSize, int* prerequisitesColSize, int* returnSize){
【LeetCode】207. 課程表
題目: 你這個學期必須選修 numCourse 門課程,記為 0 到 numCourse-1 。 在選修某些課程之前需要一些先修課程。 例如,想要學習課程 0 ,你需要先完成課程 1 ,我們用一個匹配來表 示他們:[0,1]
【LeetCode】167. 兩數之和 II - 輸入有序陣列
題目描述 給定一個已按照升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。
【leetcode】107. 二叉樹的層次遍歷 II
//C語言DFS void recursion(struct TreeNode* root,int** arr,int* ColumnSizes,int cur,int* returnSize){
【leetcode】劍指 Offer 59 - II. 佇列的最大值
//C語言 typedef struct { int front; int back; int maxFront; int maxBack; int max[10001]; int queue[10001];
【leetcode】40. 組合總和 II
int cmp(const void* a,const void* b){ return *(int*)a-*(int*)b; } void recursion(int* candidates,int candidatesSize,int** arr,int* temp,int pst,int target,int res,int* returnSize,int* returnColumnSi
【LeetCode】275. H-Index II 二叉樹的所有路徑(Medium)(JAVA)
技術標籤:Leetcode演算法leetcodejava資料結構面試 【LeetCode】275. H-Index II 二叉樹的所有路徑(Medium)(JAVA)
【LeetCode】264. Ugly Number II 醜數 II(Medium)(JAVA)
技術標籤:Leetcodejavaleetcode演算法面試資料結構 【LeetCode】264. Ugly Number II 醜數 II(Medium)(JAVA)
【leetcode】95. 不同的二叉搜尋樹 II
struct TreeNode** buildTree(int start, int end, int* returnSize) { if (start > end) { (*returnSize) = 1;
【leetcode】113. 路徑總和 II
void recursion(struct TreeNode* root,int sum,int* returnSize,int* returnColumnSizes,int**arr,int* temp,int cnt,int* total){
【LeetCode】52. N-Queens II(位運算)
【題意】 輸出N皇后問題的解法個數。 【題解】 解法一:傳統dfs回溯,模擬Q放置的位置即可,應該不難,雖然能通過,但是時間複雜度很高。
【LeetCode】350. Intersection of Two Arrays II 兩個陣列的交集 II(Easy)(JAVA)
技術標籤:Leetcodeleetcodejava資料結構演算法面試 【LeetCode】350. Intersection of Two Arrays II 兩個陣列的交集 II(Easy)(JAVA)
【leetcode】229. 求眾數 II
int* majorityElement(int* nums, int numsSize, int* returnSize){ int* res =(int*)calloc(2,sizeof(int));
【Leetcode】922. Sort Array By Parity II
技術標籤:# 陣列、連結串列與模擬leetcode演算法java 題目地址: https://leetcode.com/problems/sort-array-by-parity-ii/
【23】反轉字串 II | 反轉字串中的單詞 III (LeetCode 541 |557)
技術標籤:LeetCode刷題筆記字串演算法leetcodec++ 反轉字串 II 問題描述 給定一個字串 s 和一個整數 k,你需要對從字串開頭算起的每隔 2k 個字元的前 k 個字元進行反轉。
【Leetcode】59.II.佇列的最大值&50.第一個只出現一次的字元
技術標籤:Leetcode 59. II. 佇列的最大值 需要實現的不是佇列,而是提取佇列最大值這個功能。所以直接用queue包來實現queue。用一個佇列queue來存放資料(只能先進先出),用雙端佇列儲存最大值。
【Leetcode】928. Minimize Malware Spread II
技術標籤:LC DFS、BFS與圖論leetcode圖論dfs雜湊表資料結構 題目地址: https://leetcode.com/problems/minimize-malware-spread-ii/
【leetcode】 142 環形連結串列II
技術標籤:leetcodeC++連結串列演算法leetcode 解法一:雙指標法 思路 題目要求返回連結串列開始入環的第一個節點,無環則返回NULL。
【LeetCode】C++ :中等題 - 連結串列 142. 環形連結串列 II
技術標籤:LeetCode# 連結串列# 雙指標連結串列leetcode演算法 142. 環形連結串列 II
【Leetcode】711. Number of Distinct Islands II
技術標籤:LC DFS、BFS與圖論雜湊表hash雜湊演算法 題目地址: https://leetcode.com/problems/number-of-distinct-islands-ii/