演算法學習記錄

2021-10-14 07:46:08 字數 2545 閱讀 8644

排序演算法複雜度

層序遍歷 + 雙端佇列:

演算法流程:

特例處理: 當樹的根節點為空,則直接返回空列表 ;

初始化: 列印結果空列表 res ,包含根節點的雙端佇列 queue;

bfs 迴圈: 當 queue 為空時跳出;

新建列表 temp ,用於臨時儲存當前層列印結果;

當前層列印迴圈: 迴圈次數為當前層節點數(即 queue長度);

出隊: 隊首元素出隊,記為 node;

列印: 若為奇數層,將 node.val 新增至 temp 尾部;否則,新增至 temp 頭部;

新增子節點: 若 node 的左(右)子節點不為空,則加入 queue;

將當前層結果 temp 轉化為 list 並新增入 res ;

返回值: 返回列印結果列表 res 即可;

class

solution

else

if(node.left != null) queue.

add(node.left);if

(node.right != null) queue.

add(node.right);}

res.

add(temp);}

return res;

}}

string.substring(beginindex,endindex):從beginindex開始取,到endindex結束,其中不包括endindex位置的字元

演算法流程:

初始化: 票數統計 votes = 0 , 眾數 x;

迴圈: 遍歷陣列 nums 中的每個數字 num ; 當 票數 votes 等於 0 ,則假設當前數字 num 是眾 數; 當 num = x 時,票數 votes 自增 1 ;當 num != x 時,票數 votes 自減 1 ;

返回值: 返回 x 即可;

// 摩爾投票法

int votes =0;

int x =0;

for(

int num:nums)

return x;

模板:

public

int[

]findcontinuoussequence

(int target)

res.

add(temp);}

if(sum < target)

else

}return res.

toarray

(new

int[0]);}

設有二進位制數n,求n中1的個數:思路1:核心思路:n & (n - 1) 會把n中的最後乙個1變成0

迴圈中每次去除n的最後乙個1,res記錄迴圈次數,就是1的個數

public

class

solution

return res;

}}

思路2:

引入偽頭節點:由於初始狀態合併鍊錶中無節點,因此迴圈第一輪時無法將節點新增到合併鍊錶中

解決方案:初始化乙個輔助節點dum作為合併鍊錶的偽頭節點,將各節點新增至dum之後。

class

solution

else

cur = cur.next;

}//跳出時有兩種情況,即 l1為空或 l2為空。

}}

新增鏈結描述

Manacher s演算法學習記錄

在leetcode上刷題時遇到了這個問題,認真學習了該演算法。參考 演算法共分為三步 1.將字串a轉化為奇數長度字串b 2.計算字串b中以每乙個元素為中心的回文子串長度得到數字陣列c 3.獲取c中的最大值並依據此最大值擷取字串a得到目標最長的回文字串。直接上關鍵 預處理原始字串,將其轉化為奇數長度。...

PCA演算法學習記錄

重要宣告 以下內容主要參考吳恩達機器學習課程和張洋的pca數學原理文章 降維 dimensionality reduction 降維的目的 1 資料壓縮 2 視覺化資料。pca principal component analysis 是一種常用的資料分析方法。pca通過線性變換將原始資料變換為一組...

mysql Join演算法學習記錄

通過此次學習可以了解到join演算法的種類和原理,從而達到優化join語句 join演算法分類 nested loop join 中文意思為 巢狀迴圈鏈結 在mysql的實現中,nested loop join有3種實現的演算法 nested loop index nested loop join ...