第一道题:求有删除情况的最长回文子串
题目:
解题思路:
这个题严格意义上来说,删除了字符就谈不上回文串了,既然有删除,那估计考察的不是回文串,而是其他的,但是这个东西又有回文串的特点,细想一下——那就是不连续的回文串,想到不连续,就容易使人想到最长公共子序列,把源字符串逆序之后对比两个字符串发现:我靠,这不就是求两个序列的最长公共子序列(好像跟回文串没多大关系)。
考察:回文串,动态规划,知识迁移
1 #define M 100
2 int dpLCS[M][M]; //设置成全局变量,自动初始化为0
3
4 //动态规划法:最长回文子串,有删除,其实就是求最长公共子序列
5 int LongestCommonSequence(string str)
6 {
7 size_t n = str.size();
8 if (n == 0 || n == 1)
9 return 1;
10
11 string s = str;
12 reverse(s.begin(), s.end());
13
14 for (size_t i = 1; i <= n; ++ i) {
15 for (size_t j = 1; j <= n; ++ j) {
16 if (str[i-1] == s[j-1])
17 dpLCS[i][j] = dpLCS[i-1][j-1] + 1;
18 else
19 dpLCS[i][j] = max(dpLCS[i-1][j], dpLCS[i][j-1]);
20 }
21 }
22 return dpLCS[n][n];
23 }
第二个题:蛇形矩阵,又叫螺旋矩阵
题目:
解题思路:
解螺旋矩阵的切入点需要知道矩阵的个数,看下面一幅图:
如果是n = odd,则中间只有一个数,不算做一个矩阵,如果n = even,则中间是一个矩阵,总的矩阵个数为n/2,知道这一点,后面的工作就是分别从外向里遍历每一个矩阵即可。
1 void HelixMatrix(int n)
2 {
3 int **a = new int *[n];
4 for (int i = 0; i < n; i ++)
5 a[i] = new int[n];
6
7 int m = 0;
8 for (int k = 0; k < n/2; ++ k) { //n/2矩阵个数
9 for (int i = 0; i <= n-1-k; ++ i)
10 a[k][i] = m++; //第一区块
11 for (int i = k + 1; i < n-1-k; ++ i)
12 a[i][n-1-k] = m++; //第二区块
13 for (int i = n-1-k; i > k; -- i)
14 a[n-1-k][i] = m++; //第三区块
15 for (int i = n-1-k; i > k; -- i)
16 a[i][k] = m ++; //第四区块
17 if (n%2 == 1)
18 a[n/2][n/2] = m; //n=odd,填充中间一个数
19 }
20 for (int i = 0; i < n; i ++) {
21 for (int j = 0; j < n; j ++)
22 cout << a[i][j] << " ";
23 cout << endl;
24 }
25 //释放a
26 for(int i = 0; i < n; i ++) {
27 delete [] a[i];
28 }
29 delete []a;
30 }
附:选择题部分整理
1、HTTP协议的请求类型,端口号,返回码等
2、在同一台机器上,内存访问,SATA硬盘随机访问时间分别是:(几十纳秒,几十毫秒)
3、E={(a,b),(a,e),(a,c),(b,e),(e,d),(d,f),(f,c)}的深度优先遍历序列
4、关于操作系统的说法正确的是:
a、同一个线程内可以运行多个消息队列
b、Windows中使用临界区,不需要切换到内核态
c、互斥量可以用于多进程间对资源的安全共享
d、信号量允许多个线程同时使用共享资源
5、页面采用click事件会存在300ms延时的原因
6、用0-9,a-z表示36进制的873085
7、冒泡排序,堆排序,归并排序,快速排序的时间复杂度
8、http的返回码101,404,502,200的含义
9、面向对象程序设计SOLID五大原则,各字母的含义
10、有关网络协议说法正确的是: A.UDP是无连接不可靠的,TCP是连接可靠的
B.HTTP请求的类型有get, post, put, delete,head
C.HTTP默认端口号为80,HTTPS默认端口号为443,FTP默认端口号为21
D.根据HTTP规范,GET请求用于信息获取,并且应该是安全的和幂等的
11、两服务器相距1500km,一次ping请求耗时多长(4,8,16,32)
12、文件系统管理的最小磁盘空间单位(扇区,簇)
13、在移动端浏览器,页面采用click事件,会存在300ms的延迟,为什么?(要预先处理一些操作,还有判断是否是双击操作)
14、A和B玩纽扣游戏,一共16个纽扣,两人轮流来取,每人每次可以选取1个或3个或6个(不允许不取),规定谁取完最后的纽扣谁赢。如果让A先取,则A的必胜策略下第一步应该取?