三、模版歸納
四、題目
雙指標演算法在面試裡可以解決大部分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...