列表

详情


NC20863. 数糖纸

描述

可能很多人要吐槽为什么标题不是“救救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张的糖纸,共有三张。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

pypy3(pypy3.6.1) 解法, 执行用时: 1157ms, 内存消耗: 123900K, 提交时间: 2019-12-26 11:21:28

n = int(input())
candys = [i for i in map(int, input().split(' '))]
res = 1
dic = {}
b = 0
for i, v in enumerate(candys):
    if v in dic and dic[v] >= b:
        b = dic[v] + 1
    dic[v] = i
    res = max(res, i - b + 1)

print(res)

C++11(clang++ 3.9) 解法, 执行用时: 359ms, 内存消耗: 13920K, 提交时间: 2020-04-02 15:51:38

#include<iostream>
using namespace std;int a[1000003],n,i,j,ans,f[1000000003];int main(){cin>>n;while(j<n){cin>>a[j];while(f[a[j]])f[a[i++]]=0;f[a[j++]]=1;if(ans<j-i) ans=j-i;}cout<<ans;}

Python3 解法, 执行用时: 1340ms, 内存消耗: 110996K, 提交时间: 2022-03-12 23:39:35

m=int(input())
t=dict()
d=0
res=1
s=list(map(int,input().split()))
for i,v in enumerate(s):
    if v in t and t[v]>=d:
       d=t[v]+1
    t[v]=i
    res=max(res,i-d+1)
print(res)

上一题