雙指標又叫二重指標,常常用於解決在不開闢額外記憶體空間的情況下交換陣列或字串中元素的相對位置的問題。
這些是我目前為止遇到的雙指標用法:
1.可以用來原地修改字串。(兩個指標的運動方向相反)
編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char 的形式給出。
輸入:[「h」,「e」,「l」,「l」,「o」]
輸出:[「o」,「l」,「l」,「e」,「h」]
解題思路:對於長度為 n 的待被反轉的字元陣列,我們可以觀察反轉前後下標的變化,假設反轉前字元陣列為 s[0] s[1] s[2] … s[n - 1],那麼反轉後字元陣列為 s[n - 1] s[n - 2] … s[0]。比較反轉前後下標變化很容易得出 s[i] 的字元與 s[n - 1 - i] 的字元發生了交換的規律,因此我們可以得出如下雙指標的解法:
將陣列元素從第乙個開始,分別與結尾相當應的元素交換,直到中間位置,返回交換後的陣列即可。
void
reversestring
(char
* s,
int ssize)
}
2.兩個指標運動方向相同。
給你乙個陣列 nums 和乙個值 val,你需要 原地 移除所有數值等於 val 的元素,並返回移除後陣列的新長度。不要使用額外的陣列空間。
給定 nums = [3,2,2,3], val = 3。
函式應該返回新的長度 2, 並且 nums 中的前兩個元素均為 2。
解題思路:我們可以使用快慢指標來解決,先從陣列第乙個元素開始,當該元素與指定的要刪除的元素不同時,快指標繼續向前,而慢指標將該元素賦值給該陣列(此時它們的下表變化是不相同的),將該陣列中的每個元素分別與要刪除的元素比較完後,返回重新賦值後的陣列即可。
int
removeelement
(int
* nums,
int numssize,
int val)
}return size;
}
C 語言指標,單指標和雙指標的學習
學c語言初期,相信大家都會被指標所困擾,不知道怎麼去理解指標,本人在經過深入學習指標後終於理解單指標和雙指標的相關知識,現整理給大家,同時也是給自己學筆記,以免後面忘記了。先從單指標說起 首先我們先糾正一下,我前面一直說 指標 這樣不容易理解,我建議大家包括我自己,下次多在 指標 後面加上 型別 這...
雙指標 雙索引 演算法介紹 c
雙指標演算法在一些陣列題中很常用,它指的是一類使用兩個指標遍歷陣列求解問題的方法,這裡的指標是廣義上的,有可能是c c 中的指標,也有可能僅僅是兩個整數下標。雙指標演算法有兩種形式,一種被稱為對撞指標,兩個指標從兩端向中間靠攏 另一種是快慢指標,兩個指標向統一方向運動,滑動視窗方法就是一種常用的快慢...
寒假刷雙指標《雙指標》
633.平方數之和 難度中等163 給定乙個非負整數c,你要判斷是否存在兩個整數a和b,使得a2 b2 c。示例 1 輸入 c 5輸出 true解釋 1 1 2 2 5示例 2 輸入 c 3輸出 false示例 3 輸入 c 4輸出 true示例 4 輸入 c 2輸出 true示例 5 輸入 c 1...