数糖纸

链接:https://ac.nowcoder.com/acm/contest/372/D
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld
题目描述
可能很多人要吐槽为什么标题不是“救救blabla”了。

怪人PM6喜欢数糖纸,不同的糖纸有不同的颜色,一共有 N 张糖纸,第 i 张糖纸颜色为 Ci ,它们的位置都是固定的。PM6喜欢五彩缤纷的糖纸,所以他不希望有重复的颜色。他有一次机会,可以收集任意一段连续区间内的糖纸。求出PM6最多能收集多少张糖纸。

输入描述:
第一行一个正整数 N ,表示共有 N 张糖纸。
第二行共有 N 个正整数,第 i 个正整数表示第 i 张糖纸的颜色 Ci
对于20%的数据:1<=N<=100
对于40%的数据:1<=N<=1000
对于100%的数据:1<=N<=1e6,0<=Ci<=1e9
输出描述:
一个整数表示PM6最多能收集多少张糖纸。
示例1
输入
复制
5
1 2 2 3 4
输出
复制
3
说明
PM6可以收集第3到第5张的糖纸,共有三张。

思路:这题没看清题意,以为是求最长不同元素长度,没注意到是任意区间,不过看清了,大概我也会错一两个样例。

import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Main {
    public static void main(String[] args) {
        Set<Integer> set = new TreeSet<>();
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int[] c = new int[N];
        for(int i = 0; i<N ;i++) {
            c[i]=sc.nextInt();
        }
        int ans = 0;
        int i = 0;
        int j = 0;
        while (i < N && j < N){
            if (!set.contains(c[j])) {
                set.add(c[j]);
                j++;
                ans = Math.max(j-i, ans);
            }else {
                set.remove(c[i]);
                i+=1;
            }
        }
        System.out.println(ans);
        sc.close();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_42105744/article/details/87898352