給定乙個長度為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...