求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,重复第一步的检测:

#include <iostream>using namespace std;int main()
{int n = 5, m = 2, c = 3;int arr[5][5] = {{3,1,2,3,-1},{0,-1,-1,-1,-1},{2,2,3,-1,-1},{1,2,-1,-1,-1},{1,3,-1,-1,-1}};int color_count[4] = {0}; // 记录在m个相邻的串珠上,每种颜色出现的次数int count = 0;  // 记录有多少个颜色不符合要求int color;int i = 0, j = 0;for (i = 0; i < m; i++){for (int k = 1; k < arr[i][0]+1; k++){if (arr[i][0] == 0){color_count[0]++;break;}color_count[arr[i][k]]++;}}for (int color = 0; color < c+1; color++){if (color_count[color] > 1){count++;color_count[color] = -1;}}if (count == c+1){return count;}int loop = 1;for (i = m; ;){if (loop == n){break;}for (int k = 1; k < arr[i-m][0]+1; k++){if (arr[i-m][0] == 0){color_count[0]--;  // 将无色减1break;}if (color_count[arr[i-m][k]] == -1 || color_count[arr[i-m][k]] == 0)continue;color_count[arr[i-m][k]]--;}for (int k = 1; k < arr[i][0]+1; k++){if (color_count[arr[i][k]] == -1)continue;color_count[arr[i][k]]++;}for (int color = 0; color < c+1; color++){if (color_count[color] > 1){count++;color_count[color] = -1;}}if (count == c+1){return count;}i = (++i) % n;loop++;}cout << count;cin.get();return count;
}

串珠问题(今日头条笔试)相关推荐

  1. 字节跳动今日头条笔试题目经历2018

    本人是 字节跳动2018年12月来学校宣讲会招实习生的时候参加笔试的.方向是后端开发.那时候还在学框架啊之类的还没开始刷算法,笔试的三道题目只做出了第一道的代码,其他两道都是只写出了分析过程.刚刚出结 ...

  2. 今日头条笔试之字母交换

    一.题目描述 [编码题]字符串S由小写字母构成,长度为n.定义一种操作,每次都可以挑选字符串中任意的两个相邻字母进行交换.询问在至多交换m次之后,字符串中最多有多少个连续的位置上的字母相同? 输入描述 ...

  3. 今日头条笔试第二题--文章病句标识

    为了提高文章质量,每一篇文章(假设全部都是英文)都会有m名编辑进行审核,每个编辑独立工作,会把觉得有问题的句子通过下标记录下来, 比例[1, 10],1表示病句的第一个字符,10表示病句的最后一个字符 ...

  4. 今日头条2018校园春季招聘研发岗位笔试(第一场)经验

    笔试公司:今日头条 笔试岗位:后端开发 笔试时间:2018年3月24日19:00-21:00 笔试形式:牛客网在线做题 笔试回忆: 笔试总共五道题.是的,只有五道编码题,没有选择or填空. 第一题,输 ...

  5. 今日头条2018.8.12笔试题总结

    今日头条笔试题1(经典的floodfill问题): 具体可以参考leetcode 200题:Number of Islands 1. 一个球场C的球迷看台可容纳M*N个球迷.官方想统计一共有多少球迷群 ...

  6. 总结一下刚刚参加了今日头条的线上前端笔试

    我参加的是今日头条的前端笔试,感觉凉凉了,看来还是要知彼知己,下次要事先预习一下对方的笔试题,先从最后一题开始回忆吧,我尽量回忆全一点,希望能够帮到广大网友,我自己也要加进补一下数据结构,算法方面的知 ...

  7. 2018今日头条秋招 笔试 (2017/09/10)

    20170910 头条笔试 算法岗 [改错题] 二分查找 http://blog.csdn.net/v_july_v/article/details/7093204 //首先要把握下面几个要点: // ...

  8. 今日头条2018春季校园招聘研发岗位笔试编程题 - 题解

    由于24号头条笔试我还在回学校的路上,因此没有在笔试中做题,这些题目都是后来同学给我的,我做了下,不保证100%通过,因为我自己没在笔试中提交过.如果题目抄写有误或者说我的解法有误,或者你有更好的解法 ...

  9. 今日头条2018校园招聘后端开发工程师(第二批)编程题 - 题解

    以前做过第三批的题目,今日头条2018校园招聘后端开发工程师(第三批)编程题 - 题解.这一场的题目偏技巧和算法,而第三批的题偏编码.这一场涉及的算法有二分查找.区间动态规划. 原题链接:点这儿. 第 ...

  10. 求n边形周长的k等分点坐标(今日头条)

    题目 本题来自今天头条的笔试: 有一个n边形(P0, P1, ..., Pn), 每一条边皆为垂直或水平线段.现给定数值k,以P0为起点将n边形的周长分为k段,每段的长度相等,请打印出k等分点的坐标( ...

最新文章

  1. 6-机器学习启蒙- 深度学习: 图像搜索
  2. 力挺2007年国内原创音乐届最权威大赛!
  3. vue2.0 组件通信
  4. 《The Art of Readable Code》学习笔记(一)
  5. 犹豫了几个月,我还是跳槽了....
  6. IOS – OPenGL ES 调节图像饱和度 GPUImageSaturationFilter
  7. python dict方法_python dict()方法学习笔记
  8. iphonexr电池容量_xr电池容量多少毫安,iphonexr换电池多少钱
  9. HCIE-Security Day5:防火墙会话表和转发原理
  10. nginx 服务器重启命令,关闭(转)
  11. 什么是前端以及前端的重要性
  12. libcrypto yum 安装_CentOS升级OpenSSL至OpenSSL 1.1.0f版本其中有遇到libcrypto.so的问题...
  13. 学汽车故障计算机排除怎么样,汽车故障清除后就没事了么?
  14. springboot房屋租赁管理系统
  15. java语言中的变量有哪2种_变量类型有哪些-在C语言中的实型变量分为2种类型,它们是()和()-电气资讯 - 电工屋...
  16. 扫码枪回车键条码_条码扫描枪不自动换行怎么办,怎么设置自动回车?
  17. C#使用struct直接转换下位机数据的示例代码
  18. java后端实现集成支付宝APP支付(沙箱环境)
  19. 淘宝补单发货地不一样可以吗?正确补单流程是什么?
  20. Web应用防火墙WAF简介

热门文章

  1. 学会局域网的锐捷破解共享
  2. csdn下载分获取方法
  3. 数据库如何执行sql语句
  4. 实现企业微信机器人自动发消息
  5. Firefox选择哪个IE TAB
  6. 大华nodejs http api
  7. 微信群机器人管理系统源码+支持同登陆多号
  8. termux android api,Termux API
  9. 局域网sip服务器搭建:opensips
  10. html vue 动态加载组件