最长连续不重复子序列
C++代码实现:
#include<iostream>
using namespace std;const int N = 1000002;
int a[N], count[N];int main() {int result = 0;int n;// 输入数组长度cin >> n;// 输入数组元素for (int i = 0; i < n; i++) {cin >> a[i];}// 使用滑动窗口求解最长不重复子数组长度for (int i = 0, j = 0; i < n; i++) {count[a[i]]++;// 如果当前元素在窗口中出现了多次,移动窗口的起始位置while (count[a[i]] > 1) {count[a[j]]--;j++;}// 更新最长不重复子数组长度result = max(result, i - j + 1);}// 输出结果cout << result;return 0;
}
JAVA代码实现:
import java.util.*;public class Main{public static void main(String[] args){final int N=100002;int [] a=new int[N];int [] count=new int[N];Scanner sc=new Scanner(System.in);int n=sc.nextInt();for(int i=0;i<n;i++){a[i]=sc.nextInt();}int result=0;for(int i=0,j=0;i<n;i++){count[a[i]]++;while(count[a[i]]>1){count[a[j]]--;j++;}result=Math.max(result,i-j+1);}System.out.println(result);}}