雙指標 雙索引 演算法介紹 c

2021-10-09 00:04:27 字數 1087 閱讀 1740

雙指標演算法在一些陣列題中很常用,它指的是一類使用兩個指標遍歷陣列求解問題的方法,這裡的指標是廣義上的,有可能是c/c++中的指標,也有可能僅僅是兩個整數下標。雙指標演算法有兩種形式,一種被稱為對撞指標,兩個指標從兩端向中間靠攏;另一種是快慢指標,兩個指標向統一方向運動,滑動視窗方法就是一種常用的快慢指標方法。

對撞指標的思想如前所述,下面舉一道具體的例題來說明。這道題是leetcode345題。題目描述如下

編寫乙個函式,以字串作為輸入,反轉該字串中的母音字母。

示例 1:

輸入: 「leetcode」

輸出: 「leotcede」

使用對撞指標的思路便是初始化兩個指標i,j位於字串起始末尾,i向右尋找原音字母,找到停下;j向左尋找母音字母,找到停下;接著二者互動直到i>j;具體**中注意一下陣列越界的問題就好;

**如下:

class

solution

return s;

}bool

isvowet

(char c)

//判斷母音字母

};

滑動視窗在字串題目中很常見,我們設定兩個指標向同一方向運動,根據具體的條件滑動指標。下面結合一道具體的題目來說明,leetcode第3題。題目描述:

給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。

輸入: 「abcabcbb」

輸出: 3

解釋: 因為無重複字元的最長子串是 「abc」,所以其長度為 3

這道題可以使用雙指標演算法。首先我們定義兩個指標i=0,j=-1,然後預備乙個buf[256],用於統計字元出現的次數。如果乙個字元沒有出現過,則滑動j指標,否則滑動i指標。每次滑動之後,判定一下當前字元長度是否是最大長度即可。**如下

class

solution

else

maxlen =

max(maxlen,j-i+1)

;}return maxlen;}}

;

雙指標演算法

雙指標演算法模板 for int i 0,j 0 i n i 常見問題分類 1 對於乙個序列,用兩個指標維護一段區間 2 對於兩個序列,維護某種次序,比如歸併排序中合併兩個有序序列的操作 例題1 最長連續不重複子序列 給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸...

雙指標演算法

title 雙指標演算法 date 2019 05 26 23 45 09 tags 雙指標演算法 雙指標演算法 主要是兩大類 核心思想 將乙個 o n 2 o n 2 o n2 的演算法 優化成 o n o n o n 的for int i 0 i for int j 0 j for i 0,j ...

雙指標演算法

一般雙指標的模板 雙指標演算法的思考方式 先想出暴力做法,再觀察是否存在單調性。傳統的演算法需列舉兩個指標的組合,兩個for迴圈時間複雜度為o n 2 雙指標演算法會使時間複雜度變為o n 給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸入格式 第一行包含整數n。第...