串珠问题(今日头条笔试)

本文介绍了一道今日头条笔试题,要求解决在环形手串中,颜色在任意连续m个串珠中最多出现一次的问题。通过输入描述、示例和两种解决思路(包括位置统计和滑动窗口方法)详细阐述了如何判断并统计不符合要求的颜色数量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

求m个相邻串珠上,颜色出现重复的个数

作为一个手串艺人,有金主向你订购了一条包含n个杂色串珠的手串——每个串珠要么无色,要么涂了若干种颜色。为了使手串的色彩看起来不那么单调,金主要求,手串上的任意一种颜色(不包含无色),在任意连续的m个串珠里至多出现一次(注意这里手串是一个环形)。手串上的颜色一共有c种。现在按顺时针序告诉你n个串珠的手串上,每个串珠用所包含的颜色分别有哪些。请你判断该手串上有多少种颜色不符合要求,即询问有多少种颜色在任意连续m个串珠中出现了至少两次。

  • 输入描述:
    第一行输入n,m,c三个数,用空格隔开。(1<=n<=10000, 1<=m<=1000, 1<=c<=50) 接下来n行每行的第一个数num_i(0<=num_i<=c)表示第i颗珠子有多少种颜色。接下来依次读入num_i个数字,每个数字x表示第i颗珠子上包含的颜色(1<=x<=c)

  • 输出描述:
    一个非负证书,表示该手链上有多少种颜色不符需求。

  • 示例:
    5 2 3
    3 1 2 3
    0
    2 2 3
    1 2
    1 3

  • 说明
    第一种颜色出现在第1颗串珠,与规则无冲突。
    第二种颜色分别出现在第1,3,4颗串珠,第3颗与第4颗串珠相邻,所以不合要求。
    第三种颜色分别出现在第1,3,5颗串珠,第5颗串珠的下一个是第1颗,所以不合要求。
    总计有2种颜色的分布式有问题的。
    这里第2颗串珠是透明的。


解决思路

第一种

按照说明的方法来 求出每种颜色出现在那些串珠的位置上,对不符合要求的串珠作统计:

第二种

滑动窗口 第一次读取前m行,记录每种颜色出现的次数,将不满足要求的颜色计数,通过过的颜色不再进行运算;然后往下读取,进行n-1次,将原来m行中最上面有的颜色的计数值减1,再将最新的一行中的颜色计数加1,重复第一步的检测:


                
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值