雙指標 最長連續不重複子序列,陣列目標和,子串行

2021-10-19 10:54:24 字數 2439 閱讀 6088

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

輸入格式第一行包含整數n。

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

輸出格式

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

;/// a是存資料元素的, s是存元素出現的次數

/// 注意這題是連續的最長子序列, 思路是雙指標: i在前,j在後,記錄i指向的值出現個數,如果有重複,剔除j指向的元素->知道沒有重複, 返回個數。

intmain()

re =

max(re, i - j +1)

;//cout << re << endl;

} cout << re << endl;

return0;

}

給定兩個公升序排序的有序陣列a和b,以及乙個目標值x。陣列下標從0開始。

請你求出滿足a[i] + b[j] = x的數對(i, j)。

資料保證有唯一解。

輸入格式

第一行包含三個整數n,m,x,分別表示a的長度,b的長度以及目標值x。

第二行包含n個整數,表示陣列a。

第三行包含m個整數,表示陣列b。

輸出格式

共一行,包含兩個整數 i 和 j。

/// 暴力是通過不了的, 那麼如何進行優化o(nm)

// 發現題目給出的陣列是公升序的, 從單調性去考慮

// 從a陣列前面遍歷, b陣列後面開始,但是滿足 a[i] + b[i] > x ,一直找知道找到,, 時間複雜度o(n + m)

// 因為a從前面向後遍歷,b只能是越來越小,這時乙個單調性,所以a向後,b應該向前

//(有條件的向前j >= 0 && a[i] + b[j] > x) 然後直到找到

intmain()

//}int j = m-1;

for(

int i=

0; i

return0;

}

總結: 是利用兩個序列的公升序具有的單調性。

給定乙個長度為 n 的整數序列 a1,a2,…,an 以及乙個長度為 m 的整數序列 b1,b2,…,bm。

請你判斷 a 序列是否為 b 序列的子串行。

子串行指序列的一部分項按原有次序排列而得的序列,例如序列 是序列 的乙個子串行。

輸入格式第一行包含兩個整數 n,m。

第二行包含 n 個整數,表示 a1,a2,…,an。

第三行包含 m 個整數,表示 b1,b2,…,bm。

輸出格式

如果 a 序列是 b 序列的子串行,輸出一行 yes。

否則,輸出 no。

最長連續不重複子序列(雙指標)

給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。輸入格式 第一行包含整數n。第二行包含n個整數 均在0 100000範圍內 表示整數序列。輸出格式 共一行,包含乙個整數,表示最長的不包含重複數字的連續子串行的長度。資料範圍 1 n 100000 輸入樣例 51 2 2...

最長連續不重複子序列

給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。第一行包含整數n。第二行包含n個整數 均在0 100000範圍內 表示整數序列。共一行,包含乙個整數,表示最長的不包含重複數字的連續子串行的長度。1 n 100000 51 2 2 3 5 暴力 for int i 0 ...

最長連續不重複子序列

核心思路 遍歷陣列a中的每乙個元素a i 對於每乙個i,找到j使得雙指標 j,i 維護的是以a i 結尾的最長連續不重複子序列,長度為i j 1,將這一長度與result的較大者更新給result。對於每乙個i,如何確定j的位置 由於 j,i 1 是前一步得到的最長連續不重複子序列,所以如果 j,i...