雙指標維護筆記

才瓯發表於2024-10-19

雙指標維護筆記

雙指標特指兩個指標共同維護一個陣列:
從兩端分別維護,從同一端點交叉維護

從兩端分別維護:

例:快速排序,(從小到大排序)

在快速排序中,我們安排了兩個指標從需要排序的陣列的左右兩端開始向中間移動

更新方式是,當 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)){
		......
	}
}

相關文章