雙指標演算法在一些陣列題中很常用,它指的是一類使用兩個指標遍歷陣列求解問題的方法,這裡的指標是廣義上的,有可能是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。第...