AcWing 799. 最长连续不重复子序列-Java-注释
原题链接
简单
作者:
snake_skin
,
2024-03-15 21:13:54
,
所有人可见
,
阅读 13
题目描述
样例
import java.io.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StringTokenizer st;
static int N = 100100;
static int n;
static int a[] = new int[N];
static int s[] = new int[N];
static int max = 0;
public static void main(String[] args) throws IOException{
n = Integer.parseInt(br.readLine());
st = new StringTokenizer(br.readLine());
for(int i = 0; i < n; i++) {
a[i] = Integer.parseInt(st.nextToken());
}
for(int i = 0,j = 0; i < n; i++) {
// 把当前值s的下标+1
s[a[i]]++;
// 当前值s的下标>1说明该数值在j-i的区间内重复出现
while(s[a[i]] > 1) {
// j-i的范围的s下标值之前都被+1了,这里从j开始-1,不断-1,直到j=1时,s[a[i]]就 !>1 了
s[a[j]]--;
j++;
}
// 存储最大区间
// 在进入while的前一次循环 是没进入while的,此时就是最大区间
// 在进入while后,得到的值是小于max的,所以不会存入max
max = Math.max(max, i - j + 1);
}
System.out.print(max);
br.close();
}
}