面试算法题目
- 看到一篇博客,总结了各种链表相关的问题,mark一下,感觉很不错~
戳我:http://wuchong.me/blog/2014/03/25/interview-link-questions/ - 《编程之美》中“金刚坐飞机”问题:
- 《编程之美》中“瓷砖覆盖地板”问题的扩展问题:
- 《编程之美》2.3 寻找发帖水王的扩展题目-寻找发帖量最多的三个ID,他们发帖总数超过了帖子总数目N的1/4。参考:
http://blog.csdn.net/tanyujing/article/details/8622362 - 《编程之美》2.10 寻找数组中的最大值的最小值的扩展题目-找出长度为N的数组中的第二大数,需要比较多少次?分治思想能否降低比较次数。
个人认为:N次,设置两个临时变量保存最大和次大数,初始化为Integer.MIN_VALUE
,然后从头到尾扫描一遍数组,如果当前数比最大数大,次大数赋值当前最大数,最大数更新当前数。比较的次数即N次即可。 - 《编程之美》 2.20 程序理解和时间分析
给出程序段
#include <iostream>
#include <limits>
using namespace std;
int main() {
int rg[] = {2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,30,31};
for(__int64 i =1; i < numeric_limits<__int64>::max(); i++) {
int hit = 0;
int hit1 = -1;
int hit2 = -1;
for(int j = 0; j < sizeof(rg)/sizeof(*rg) && (hit <= 2); j++) {
if((i % rg[j]) != 0) {
hit++;
if(hit == 1) {
hit1 = j;
} else if(hit == 2) {
hit2 = j;
} else break;//如果找到第三个不能整除的数,循环退出。
}
}
//如果hit不为2,就不会输出,只有满足hit为2且两个hit是连续的才输出。
if(hit == 2 && hit1+1==hit2) {
cout << "find " << i << endl;
break;
}
}
return 0;
}
1)上段代码主要目的是为了找出这样一个数x
, 使得数组rg
中只有两个不能被x
整除且两个不能被整除的数是连续的。
2)这样的数存在么?求符合这样的数的最小数。
参考:http://blog.csdn.net/erorr/article/details/5837391