雙指標演算法

2021-10-03 07:02:24 字數 1019 閱讀 7323

一般雙指標的模板:

雙指標演算法的思考方式:

先想出暴力做法,再觀察是否存在單調性。

傳統的演算法需列舉兩個指標的組合,兩個for迴圈時間複雜度為o(n^2),雙指標演算法會使時間複雜度變為o(n)

給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。

輸入格式

第一行包含整數n。

第二行包含n個整數(均在0~100000範圍內),表示整數序列。

輸出格式

共一行,包含乙個整數,表示最長的不包含重複數字的連續子串行的長度。

資料範圍

1≤n≤100000

輸入樣例:

51 2 2 3 5

輸出樣例:

3思路:i 代表不包含重複數字的連續子串行的最後乙個元素的下標,j 代表子串行第乙個元素的下標。列舉 i (從0~n-1),確定每個 i 所對應的 j 最小是多少。容易發現,隨著 i 的右移,j 是不動或者右移,不可能左移,找到了 j 的單調性,就可以寫**了。

#include

using

namespace std;

const

int n=

100010

;int n;

int a[n]

,s[n]

;//a[n]存數字,s[n]存每個數字在j~i區間**現的次數

intmain()

res=

max(res,i-j+1)

;//比較子串行長度,取最大值

} cout<

return0;

}

雙指標演算法

雙指標演算法模板 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 ...

雙指標演算法

leetcode 141 環形鍊錶 definition for singly linked list.struct listnode class solution return false leetcode 142 環形鍊錶2 class solution if hascycle return n...