百度2014校园招聘笔试题武汉站三道算法设计题
1、给定任意一个整整数、求比这个数大且最小的不重复数、就是相邻两位不同,例如1231.如1101就是重复数。
解:
思路:每次将给定的值加上1,然后判断这个数是否为重复数,如果是则继续加1,如果不是则输出结果。
判断一个数是否为重复数比较简单,可以设置两个指针,两个相邻的数字进行比较。
code:代码比较简单,此处略。
2、长度为n字符串、求字符串里最长回文子串
解:
思路:
可以参考资料:
给出一个经典的方法:介绍一个专门针对回文子串的算法,其时间复杂度为O(n),这就是manacher算法。
3、数轴上从左到右有n个点、a[0] a[1]……、给定一根长度为L的绳子、求绳子最多覆盖其中几个点?
解:
void maxCover(int* a, int n, int l) {
int maxCover = 1;
int beginPos = 0, endPos = 1;
while (endPos <= n – 1 ) {
if (a[endPos] – a[beginPos] >= l) {
If (a[endPos] – a[beginPos] == l ) {
maxCover = endPos–beginPos + 1; // 正好
} elseif (a[endPos] – a[beginPos] > l ) {
maxCover = endPos–beginPos; // 回退一个点
}
beginPos++; // 起点右移一位
}
endPos++;
}
return maxCover;
}