一般雙指標的模板:
雙指標演算法的思考方式:
先想出暴力做法,再觀察是否存在單調性。
傳統的演算法需列舉兩個指標的組合,兩個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...