雙指標維護筆記
雙指標特指兩個指標共同維護一個陣列:
從兩端分別維護,從同一端點交叉維護
從兩端分別維護:
例:快速排序,(從小到大排序)
在快速排序中,我們安排了兩個指標從需要排序的陣列的左右兩端開始向中間移動
更新方式是,當 i 指標從左向右移動,j 指標從右向左移動時,若 i 的值大於 j 的值
則交換 i j 兩個指標各自指向的值,繼續向中間逼近,直到 i j 相遇
從同一端點交叉維護:
例:輸入 n 個單詞,用空格隔開,輸出每行一個單詞
我們令有 i j 兩個指標,一開始都指向字串組的 char[0]
首先固定一個指標 j ,指標 i 開始向右移動
更新方式是,當 i 指標指向的值為 ‘ ‘ (空格)時,兩個指標中間的char段則為第一個單詞
然後將 j 同步到 i 的位置並向右移動一個單位,使得 j 指向下一個單詞的首字母,繼續執行 i 向右移動的操作
在每次過程中輸出的操作不言而喻
複雜度解釋:
雙指標演算法可以將時間複雜度On2 最佳化至On
可以做個簡單推導:
//樸素演算法
for (int i=0;i<n,i++){
for (int j=0;j<n;j++){
if (check(j,i))
......
}
}
//雙指標演算法
for (int i=0;i<n;i++){
while (j<=i&&check(j,i)){
......
}
}