1. 程式人生 > 其它 >GMM和工具變數在面板資料中的運用

GMM和工具變數在面板資料中的運用

把做演算法中體會到心得記錄下來,以後即使忘了,也可以看這個筆記進行復習。

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. 合併兩個有序陣列

樹林美麗、幽暗而深邃,但我有諾言尚待實現,還要奔行百里方可沉睡。 -- 羅伯特·弗羅斯特