雙下標(雙索引)的妙用

編程時,涉及到數組的旋轉(以數組中心點爲對稱點進行亮亮交換),根據一般的做法是下面這樣:

for (int i = 0; i < n/2; ++i)
{
	a[i] = a[n-1-i];
}

但有時候碰到邏輯複雜的時候,這個就很容易把for循環的第二個條件寫錯,還有個問題就是需要考慮n是奇數還是偶數,這時候就很難分清楚i的上限到底是n/2還是(n-1)/2。(我就經常犯這種錯誤)。如果下標不對,就會造成越界訪問或者交換結果不正確,下面提供一種根本不用考慮下標或者n的奇偶性的交換方法。

for (int i = 0, j = n-1; i != j; ++i, --j)
{
	a[i] = a[j];
}

或者:

for (int i = 0, j = n-1; i  < j; ++i, --j)
{
	a[i] = a[j];
}

這種雙指針的操作應用很廣泛,包括在判斷鏈表中是否有環的題目中也會用到,區別就是初始值的不同。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章