百度2014校园招聘笔试题武汉站三道算法设计题

百度2014校园招聘笔试题武汉站三道算法设计题

1、给定任意一个整整数、求比这个数大且最小的不重复数、就是相邻两位不同,例如1231.如1101就是重复数。
解:
思路:每次将给定的值加上1,然后判断这个数是否为重复数,如果是则继续加1,如果不是则输出结果。
判断一个数是否为重复数比较简单,可以设置两个指针,两个相邻的数字进行比较。
code:代码比较简单,此处略。

2、长度为n字符串、求字符串里最长回文子串
解:
思路:
可以参考资料: 
http://blog.csdn.net/chdhust/article/details/8241183 
给出一个经典的方法:介绍一个专门针对回文子串的算法,其时间复杂度为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;
}


你可能感兴趣的:(百度2014校园招聘笔试题武汉站三道算法设计题)