數糖紙

鏈接: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();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章