【编程题目】一串首尾相连的珠子(m 个),有 N 种颜色(N<=10),取出其中一段,要求包含所有 N 中颜色,并使长度最短。
40.百度研发笔试题
2)一串首尾相连的珠子(m 个),有 N 种颜色(N<=10),
设计一个算法,取出其中一段,要求包含所有 N 中颜色,并使长度最短。
并分析时间复杂度与空间复杂度。
思路:
先将表示珠子的串in复制两遍,变成inin这样就不用余数了。
我用char型表示不同的颜色。s表示当前起始点,e表示当前结束点。
用hash[256]来存放s到e不同颜色的珠子出现次数,避免char转数字的麻烦。
先把s、e都定位在开始,e向后遍历,直到遇到N种不同颜色。
之后遍历时,s定位到下一个颜色的位置,如果总颜色数变少,e再定位到总颜色数为N的位置。
直到s的位置超过链子长度m.
理论上会遍历两遍时间复制度为O(m),空间上如果直接用整数表示不同的珠子需要O(N)
/*
40.2)
一串首尾相连的珠子(m 个),有 N 种颜色(N<=10),
设计一个算法,取出其中一段,要求包含所有 N 中颜色,并使长度最短。
并分析时间复杂度与空间复杂度。
*/ #include <stdio.h>
#include <stdlib.h>
#include <string.h> int shortestlengh(char * in, char ** dst, int N)
{
//变成inin的形式,避免求余
int nlen = strlen(in);
char * in2 = (char *)malloc( * nlen * sizeof(char));
memcpy(in2, in, nlen * sizeof(char));
memcpy(in2 + nlen, in, nlen * sizeof(char)); int start = , end = nlen - ;
int shortestlen = nlen;
int hash[] = {};
int colornum = ;
int s = , e = -;
//遍历所有可能的起始点
while(s < nlen)
{
while(colornum < N && e <= * nlen) //找到在当前起点下找到所有颜色的结尾
{
e++;
if(hash[int(in2[e])] == )
{
colornum++;
}
hash[int(in2[e])]++;
}
//去掉前面相同的部分
while(in2[s] == in2[s + ])
{
s++;
hash[(int)in2[s]]--;
} //更新最短的串
if(shortestlen > e - s + )
{
shortestlen = e - s + ;
start = s;
end = e;
} //更新s,从下一个颜色开始
hash[(int)in2[s]]--;
if(hash[(int)in2[s]] == )
{
colornum--;
}
s = s + ;
} *(dst) = (char *)malloc(end - start + );
memcpy(*dst, in2 + start, end - start + );
(*dst)[end - start + ] = '\0'; //注意 free(in2); return end - start + ;
} int main()
{
char * s = "addcddcbccbba";
char * d = NULL;
int n = shortestlengh(s, &d, );
printf("%d\n%s\n", n, d);
return ;
}
【编程题目】一串首尾相连的珠子(m 个),有 N 种颜色(N<=10),取出其中一段,要求包含所有 N 中颜色,并使长度最短。的更多相关文章
- OJ——华为编程题目:输入字符串括号是否匹配
package t0815; /* * 华为编程题目:输入字符串括号是否匹配 * 若都匹配输出为0,否则为1 * 样例输入:Terminal user [name | number (1)] * 样例 ...
- php实现 提取不重复的整数(编程题目能够最快的熟悉函数)
php实现 提取不重复的整数(编程题目能够最快的熟悉函数) 一.总结 一句话总结:编程题目能够最快的熟悉函数. 1.字符串反转函数? 没有str_revserse,有arr_reverse,这里是st ...
- 网易云课堂_C++程序设计入门(下)_期末考试_期末考试在线编程题目
期末考试在线编程题目 返回考试 本次考试题目一共两个,在考试期间可以不限制次数地提交 温馨提示: 1.本次考试属于Online Judge题目,提交后由系统即时判分. 2.学生可以在考试截止时间 ...
- 数据结构代码整理(线性表,栈,队列,串,二叉树,图的建立和遍历stl,最小生成树prim算法)。。持续更新中。。。
//归并排序递归方法实现 #include <iostream> #include <cstdio> using namespace std; #define maxn 100 ...
- WPF编程,通过Double Animation动态旋转控件的一种方法。
原文:WPF编程,通过Double Animation动态旋转控件的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/art ...
- WPF编程,通过Double Animation动态缩放控件的一种方法。
原文:WPF编程,通过Double Animation动态缩放控件的一种方法. 版权声明:我不生产代码,我只是代码的搬运工. https://blog.csdn.net/qq_43307934/art ...
- shell编程系列16--文本处理三剑客之awk模式匹配的两种方法
shell编程系列16--文本处理三剑客之awk模式匹配的两种方法 awk的工作模式 第一种模式匹配:RegExp 第二种模式匹配:关系运算匹配 用法格式对照表 语法格式 含义 RegExp 按正则表 ...
- 小议 - 来自《XX时代XX公司》的笔试编程题目
经过几天的雾霾,魔都终于放晴了.哥投了几天的简历,希望找到一份.NET开发方面的岗位.也收到了几个面试邀请.这不应Ge老师的要求,选了个良辰吉日,带着身份证,学位证怀揣着2B青年的梦想来这个XX公司面 ...
- 关于C语言的几个考试编程题目
提交要求:1:邮件名称:学号后三位-题目编号-姓名-期中考试.例如:098-1-沈苗-期中考试2:不用附件提交,直接写邮件,内容包括编程思路(写一段自己对题目的认识.思路.技术细节等).源代码.运行结 ...
随机推荐
- C#创建windows服务列表
转载自:http://www.cnblogs.com/sorex/archive/2012/05/16/2502001.html Windows Service这一块并不复杂,但是注意事项太多了,网上 ...
- Cotex-M3内核STM32F10XX系列时钟及其配置方法
一.背景 最近做个项目,需要使用STM32,还是以前一样的观点,时钟就是MCU心脏,供血即时钟频率输出,想要弄明白一个MCU,时钟是一个非常好的切入点.言归正传,网上已经有太多大神详述过STM32的详 ...
- 大数据之Ganglia安装1
0.前期准备修改主机名.ip.iptables关闭:时间同步:ntpdate -s time.windows.com;软件准备ganglia-3.7.1.tar.gz.ganglia-web-3.7. ...
- ajax状态
ajax的几个状态 Uninitialized 初始化状态.XMLHttpRequest 对象已创建或已被 abort() 方法重置. Open open() 方法已调用,但是 send() 方法未调 ...
- MapServer+TileCache+Apache+Python24 构建KS数据服务器
刚刚配置好TileCache,准备开工. 期间碰到多种配置的问题,罗列一下. 1.mod_python的一个最主要优点就是在性能上超越传统CGI.所以使用mod_python替代CGI.前提是安装好a ...
- Redis优化之CPU充分利用
Linux Redis Server之CPU充分利用 不知道大家有没有注意到你们公司的集群配置是否是有一种配置是这样的: 多个Redis Server分布在同一个节点,只是端口不同,如果有的话,应该是 ...
- 研究kisso跨域登录的心得
kisso OA所有请求都跳转到这个接口,登录只有这一个入口 http://my.web.com:8090/oa/login.ht @RequestMapping("/login.ht&qu ...
- javaweb项目中的WEB-INF与META-INF
/WEB-INF 放置web应用程序配置文件.jsp页面.lib包.classes文件等. /META-INF java打jar包时,自动生成的一个文件夹.相当于一个信息包,目录中的文件和目录获得ja ...
- BZOJ1212——L语言
题目大意:每一个字符串都可以分解成一些个单词组成,现在给你一些单词,再给你一个字符串, dp吧,设f[i]为从0开始,到i结束的字符串前缀是否可以被分解,因为单词长度很小,所以,这就T了, (什么逻辑 ...
- angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
在模板中直接: 在ionic中直接使用: <p class="contentwen" ng-bind-html="detial.content">& ...