面試演算法 雙指標演算法

2021-10-24 16:25:59 字數 1246 閱讀 8765

三、模版歸納

四、題目

雙指標演算法在面試裡可以解決大部分array和linkedlist的問題。 正常來說,我們遍歷乙個array或linkedlist的方式是使用單個指標(index)。但有時候可以使用兩個指標來解決複雜的陣列問題。

兩個指標起始位置相同,背向朝兩邊移動。

背向雙指標邏輯較為簡單,在本文不細講。

兩個指標處理兩個線性資料結構,如linkedlist, array, string。

一般比較簡單。

兩個指標起始位置為開頭和末尾,相向朝中間移動

相向雙指標題型大致可細分為三類 :

two sum

partition

兩個指標起始位置均為開頭,同向朝末尾移動。

同向雙指標演算法可細分為兩類:

two sum 題型的模版, 要使用這個模版必須保證array有序

while

(left < right)

else

if(twosum < target)

else

}

一般partition的模版

while

(left <= right)

while

(left <= right && nums[right] 應該在右側)

if(left <= right)

}

有很多partition雙指標題會涉及到quick-select演算法。

這裡給出quick-select模版,本質是進行多次partition, 時間複雜度是o(n)

private

intquickselect

(int

nums,

int start,

int end,

int k)

if(k >= left)

return nums[k]

;}

slidingwindow的模版比較底層,很多題需要在這個模版的基礎上做比較多的改動,比如引入hashmap和移動左指標。

int j =0;

//i 為視窗左指標,j為視窗右指標

for(

int i =

0; i < array.length; i++)if

(j >= array.length)..

.// 處理得到的視窗

}

面試演算法題

前幾天,一好友去筆試,有一題 現在有1000個蘋果,和10個箱子,如何把這1000個蘋果裝在這10個箱子裡,才能使不管任何數量 1 1000 的蘋果,都能一次給出?當時,我們都想,出題這人。今天,在想移位的時候,突然想到了,這絕對是二進位制數的變種。分析 1000個蘋果,最接近1024,轉化為2進製...

面試演算法記錄

1.親和數問題 求500萬以內的所有親和數 如果兩個數a和b,a的所有真因數之和等於b,b的所有真因數之和等於a,則稱a,b是一對親和數。例如220和284,1184和1210,2620和2924。思路 220 1 2 4 71 142 sum 284 284 1 2 4 5 10 11 20 22...

面試演算法題目

看到一篇部落格,總結了各種鍊錶相關的問題,mark一下,感覺很不錯 戳我 程式設計之美 中 金剛坐飛機 問題 程式設計之美 中 瓷磚覆蓋地板 問題的擴充套件問題 程式設計之美 2.3 尋找發帖水王的擴充套件題目 尋找發帖量最多的三個id,他們發帖總數超過了帖子總數目n的1 4。參考 程式設計之美 2...