题目描述
双指针算法
本题要开个数组统计数字出现的次数
样例
import java.util.Scanner;
/*
双指针模板
for(int i = 0, j = 0; i < n; i ++ ) {
while (j < i && check(i, j)) {
j ++ ;
}
// 具体问题的逻辑
}
*/
public class Main {
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int[] a = new int[100010];
int[] s = new int[100010];//统计数字出现的次数
for(int i = 0 ; i < n ; i ++ ){
a[i] = scan.nextInt();
}
int res = 0;
for(int i = 0 , j = 0 ;i < n ; i ++ ){
//一开始S[2]是0;然后你的a[1] = 2;那么s[2] = 1;然后如果a[2] = 2 ;那么第二次出现所以s[2] = 2;这样来证明是不是出现两次
s[a[i]] ++ ;
//如果进来的a[i]出现的次数超过1次才进循环,去移动j 我们也可以知道就是此时a[i]=a[j],让出现超过1次
while(j < i && s[a[i]] > 1){
//把a[j]移除子序列,其实就是出现次数减一
s[a[j]] -- ;
//j往后移动
j++;
}
//i-j+1是统计长度的公式;
res = Math.max(res, i-j+1);
}
System.out.println(res);
}
}
双指针算法理解
————————————————————————————————————————————————————————————————————————————————
题目理解