GMM和工具變數在面板資料中的運用
阿新 • • 發佈:2021-07-14
把做演算法中體會到心得記錄下來,以後即使忘了,也可以看這個筆記進行復習。
1、逆序想到 stack ; 比如445. 兩數相加 II,當然,可以用 stack 也是可以用 List,list 有序,因此也是可以當作 stack 用;
2、要求達到 O(n \log n)O(nlogn) 的時間複雜度和 O(1)O(1) 的空間複雜度,時間複雜度是 O(n \log n)O(nlogn) 的排序演算法包括歸併排序、堆排序和快速排序(快速排序的最差時間複雜度是 O(n^2)O(n2)),其中最適合連結串列的排序演算法是歸併排序。
3、對於連結串列,有時候需要把頭結點加入迴圈,可以在頭結點前面在家一個節點,這樣就可以用於判斷了;
4、連結串列常用的操作邏輯,用 stack, 陣列儲存節點組成新的佇列;用一個新節點來連線原來的節點,這樣,即使對原有節點改變了,還是可以返回頭結點。熟悉連結串列的反轉,合併等邏輯。
5、關於二叉樹,二叉樹一般採用遞迴,一般是遞迴到最後一個的時候,在不斷往前,因此你要做好最好一個判斷到底是返回什麼,比如深度的求解等等。
class Solution { public int maxDepth(TreeNode root) { if (root == null) { return 0; } else { int leftHeight = maxDepth(root.left); int rightHeight = maxDepth(root.right);return Math.max(leftHeight, rightHeight) + 1; // 這裡加1,不斷遞迴,數值就變大了 } } }
6、二叉樹的遞迴呼叫其實就是存在一個隱藏的stack。只是大家平時熟悉了遞迴,沒有去細想內部的邏輯。所以如果不採用遞迴方式來實現,就是得采用 stack 來維護這個順序,但是要注意先入後出這個點。
7、如果給你一個數組 num1 足夠空間,前部分已經存在值了,讓你把另一個 num2 的值填到 num1 中。這種要麼新建一個數組,填完後再挪到 num1 中,另一種是從合併後的長度開始填,這樣確保不會覆蓋 num1 前面已有的值。可參考 88. 合併兩個有序陣列