leetcode中常用的演算法簡介

2021-07-01 23:27:30 字數 1582 閱讀 6001

1.binary search

二分法檢索(binary search)又稱折半檢索,二分法檢索的基本思想是設字典中的元素從小到大有序地存放在

陣列(array)中,

首先將給定值key與字典中間位置上元素的關鍵碼(key)比較,如果相等,則檢索成功;

否則,若key小,則在字典前半部分中繼續進行二分法檢索;

若key大,則在字典後半部分中繼續進行二分法檢索。

這樣,經過一次比較就縮小一半的檢索區間,如此進行下去,直到檢索成功或檢索失敗。

偶數個取中間2個其中任何乙個作為中間元素,

二分法檢索是一種效率較高的檢索方法,要求字典在

順序表中按關鍵碼排序。

2.two pointers

兩個指標法。two pointers指的是一類題,而不一定是真正的two pointers, 比如可能是three pointers, 也可能不是pointer, 而是index。這類題基本上就是發生在array, string, linked list這三種資料結構上,是一種基本的演算法和程式設計技巧,同樣超高頻率的出現,可以說是面試必遇的題。two pointers常常和其他的演算法混雜起來出現。比如binary search本身也可以歸類為two pointers的。如果這樣算的話,leetcode上邊1/4的題目都跟它相關。因此,two pointers是必須熟練掌握的基本程式設計技巧。

3.dfs和bfs

廣度優先搜尋(breadth-first-search)和深度優先搜尋(deep-first-search)是搜尋策略中最經常用到的兩種方法,特別常用於圖的搜尋.其中有很多的演算法都用到了這兩種思想,比如:dijkstra單源最短路徑演算法和prim最小生成樹演算法都採用了和寬度優先搜尋類似的思想。

(1).bfs的思想:

從乙個圖的某乙個頂點v0出發,首先訪問和v0相鄰的且未被訪問過的頂點v1、v2、……vn,然後依次訪問與v1、v2……vn相鄰且未被訪問的頂點。如此繼續,找到所要找的頂點或者遍歷完整個圖。

由此可以看出,用bfs進行搜尋所搜尋的頂點都是按深度進行擴充套件的,先找到到v0距離為1的所有頂點,然後找到距離v0為2的頂點……所以bfs所搜尋到的都是最短的路徑。

(2).dfs的思想:

顧名思義,深度優先搜尋所遵循的策略就是盡可能「深」的在圖中進行搜尋,對於圖中某乙個頂點v,如果它還有相鄰的頂點(在有向圖中就是還有以v為起點的邊)且未被訪問,則訪問此頂點。如果找不到,則返回到上乙個頂點。這一過程一直進行直到所有的頂點都被訪問為止。 dfs可以搜尋出從某乙個頂點到另外的乙個頂點的所有路徑。 由於要進行返回的操作,我們採用的是遞迴的方法。

詳見:4.recursion

遞迴演算法

詳見:5.dp

6.merge

歸併演算法,如將有序的sr[i..m]和sr[m+1..n]歸併為有序的tr[i..n]

7.kmp

kmp演算法是一種改進的

字串匹配

演算法,由d.e.knuth與v.r.pratt和j.h.morris同時發現,因此人們稱它為

克努特——莫里斯

——普拉特

操作(簡稱kmp演算法)。kmp演算法的關鍵是根據給定的模式串w1,m,定義乙個next函式。next函式包含了模式串本身區域性匹配的資訊。

php中常用的演算法

1 氣泡排序法 介紹 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,依次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越來越小的元素會經由交換慢慢 浮 到數列的頂端。步驟 比較相鄰的...

Spark中常用的演算法

spark中常用的演算法 分類演算法屬於監督式學習,使用類標籤已知的樣本建立乙個分類函式或分類模型,應用分類模型,能把資料庫中的類標籤未知的資料進行歸類。分類在資料探勘中是一項重要的任務,目前在商業上應用最多,常見的典型應用場景有流失 精確營銷 客戶獲取 個性偏好等。mllib 目前支援分類演算法有...

演算法中常用的數字操作

void swap int a,int b float max float a,float b,float c int nomberof1 int n return count 正數使用原始碼表示,負數使用補碼表示。在c語言中,整數右移則左側填充符號位的值 整數左移,右側填充0。c語言在16位的編譯...