百度20140925面试算法题一道
2014-09-26 10:15
253 查看
题目:一个char数组只包含a,b,c,d,e五种字符,设计一种算法,找出一个包含五种字符的最小区间【a,b】,数组是循环的
O(n)算法:
O(n)算法:
/* *一个char数组只包含a,b,c,d,e五种字符, *设计一种算法,找出一个包含五种字符的最小区间【a,b】 *数组是循环的 */ #include<iostream> using namespace std; void find(char array[], int size) { int count[5]; for(int i = 5; i <= size; i++)//区间宽度从5开始,遍历数组中所有区间 { for(int index = 0; index < 5; index++) count[index] = 0;//将a,b,c,d,e的个数都初始化为0 //下面遍历数组,对于前i个数,将对应的字符数加1 //每遍历后面一个数,相当于把区间往后移一位,所以需要将前面区间的第一位字符从count数组中去除(减1) //对于每个区间,将count数组的数相乘就能判断是否包含了五种字符 for(int begin = 0; begin < size + i - 1; begin++) { int tmp_begin = begin; if(begin < i) count[array[begin] - 'a']++; else { count[array[begin - i] - 'a']--; if(begin >= size) tmp_begin = begin - size; count[array[tmp_begin] - 'a']++; } if(begin >= i - 1 && count[0] * count[1] * count[2] * count[3] * count[4] != 0)//a,b,c,d,e个数相乘,判断是否至少有一个为0 { cout << '[' << begin - i + 1 << ',' << tmp_begin << ']' << endl; return; } } } }已知有O(n)算法,另外想。
相关文章推荐
- 百度面试的一道概率方面算法题
- 百度一道关于算法的面试题目
- 解析一道百度面试算法题目
- 百度很有意思的一道面试题目
- 2017百度面试现场coding算法一
- 【算法系列】一道面试算法题
- 一道看似非常难的面试算法题
- 经典百度面试算法:万人工厂分配任务
- 测试开发面试真题—算法(百度)
- 面试遇到的既简单又复杂的一道算法题
- [面试] 百度一道很大的设计题,海量 user 海量 url 访问的问题!
- 腾讯2015校招面试中一道算法题
- 一道百度面试的智力题的数学思想
- 面试中遇到的一道算法题,请各位对我的算法指点一下
- 面试之路(2)-百度算法题
- 如何找出数组中第二大的数?(一道面试算法题的思考)
- 一道百度算法面试题讲解
- 腾讯面试中一道算法题:一个数N 的2进制表现形式中1的个数
- 一道看上去很吓人的算法题 【微软面试去100题 第四十九题】
- [面试] 百度一道很大的设计题,海量 user 海量 url 访问的问题!