發表文章
leetcode 演算法
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
Kadane's Algorithm 動態規劃常常適用於有重疊子問題和最佳子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。 重疊子問題 https://magiclen.org/dynamic-programming-basic/ 記憶法(Memoization)與製表法(Tabulation) Top-down:記憶法(Memoization) 通常用遞迴 Bottom-up:製表法(Tabulation) 通常用for 從 0 到 n 最優子結構: https://www.youtube.com/watch?v=JWTqsNvtwP4&ab_channel=GeeksforGeeks
java leetcode 小技巧
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
http://hilite.me/ =========== return new int[] { i, j }; 可以直接產生結果。 ========== StringBuilder res = new StringBuilder() String Builder可以創建動態長度的string,並可以串接不同型態的變數,都會轉成字串。 toString 轉成 String 型態。 ========== String a = "aa"; a.charAt(0) 可以從字串拿值。 ========== 給int x; char str[] = Integer . toString(x) . toCharArray(); 可以把數字轉成 str array。 ========== int m = (l + r) >> 1 ; 等價於 int m = (l + r) / 2; ========== 二維陣列動態規劃起手式 // 宣告array長度的dp boolean [][] dp = new boolean [ arr . length ][ arr . length ]; // 將對角線初始化 for ( int a = 0 ; a < arr . length ; a ++) { dp [ a ][ a ] = true ; } // 產生不同間隔 // length = 5 /* 間隔1 0 1 1 2 2 3 3 4 間隔2 0 2 1 3 2 4 間隔3 0 3 1 4 間隔4 0 4 */ for ( int a = 0 ; a < arr . length ; a ++) { for ( int b = 0 ; b < arr . length - a - 1 ; b ++) { int diff = b + a + 1 ; } }
MVC理解
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
https://stackoverflow.com/questions/5863870/how-should-a-model-be-structured-in-mvc/5864000#5864000 https://stackoverflow.com/questions/16356420/mvc-for-advanced-php-developers/16356866#16356866 https://nikic.github.io/2011/12/27/Dont-be-STUPID-GRASP-SOLID.html MVC為一個設計模式,Model為一個層,不是一個物件或是一個class,包含業務邏輯跟資料存取,Controller為一個交互層,只負責接收進來的資料,傳到Model做處理,所以Controller只是薄薄的一層,View為顯示介面,不包含計算邏輯。 Model包含三個部分: Domain Objects: 表示業務邏輯的物件。 Data Mappers: 資料持久化,不管來源從哪邊來,可能是DB、API、檔案。 Services: Domain Objects和Data Mappers的交互層,可以避免一些Domain Object的業務邏輯進入Controller。
物件導向
- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
抽象 只提供基本資訊,隱藏不必要的資訊。 降低設計的難度 封裝 隱藏實作細節 裡面的數據不提供給外部對象使用 外部對象只能通過接口溝通 繼承 被繼承的類叫基類,繼承的類叫子類。 基類應為一個抽象概念,為一個抽象類,代表不應直接實例化基類。 子類有基類的功能跟數據,減少重複。 多型 子類代替父類。 傳入參數定義成父類,傳入子類達到不同功能。 父類為抽象,符合針對抽象編程。 類的關係 aggregation association dependency composition inheritance (generalization) implementation (Realization) association 為 has a 的關係,A has a B 代表,A class 有一個成員變數為 B。 程式碼為 : class A { B b; } dependency 為 A references B (use a) 的關係,A references B 代表 A 在某個 function 內有用到 B,A 使用 B 的操作,但卻不擁有 B,可能是: 通過參數傳入 直接 new 返回值 靜態function 全域對象、變數、function 程式碼為 : 參數傳入 class A { function t1(B b) { } } 或直接 new class A { function t1() { B b = new b(); } } 或返回值 class A { function t1() { return new B(); } } aggregation 也是 has a (own a) 的關係,為 association 的子集,為較弱的 association ,A 聚合 B 代表,A 擁有 B,但是 B 可以獨立運作。 程式碼為 : class A { ...