鏈接: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();
}
}