AcWing 799. 最长连续不重复子序列 java
原题链接
简单
java 双指针算法
主要思想是:每当出现重复元素下标 i 时,从下标 j 开始移动,直至当 j -i 子串中不会再有重复的元素,此时可以另外使用一个数组,标记当前子串中个元素出现的次数,
import java.io.*;
import java.util.*;
class Main{
static int N = 100010;
static int[] a = new int[N], s = new int[N];
public static void main(String[] args) throws IOException{
BufferedReader cin = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(cin.readLine());
String[] str = cin.readLine().split(" ");
for (int i = 0; i < n; i++) {
a[i] = Integer.parseInt(str[i]);
}
int res = 0;
for (int i = 0, j = 0; i < n; i++) {
s[a[i]]++;
while (s[a[i]] > 1) {
s[a[j]]--;
j++;
}
res = Math.max(res, i - j + 1);
}
System.out.println(res);
}
}