第一道题:求有删除情况的最长回文子串
题目:
解题思路:
这个题严格意义上来说,删除了字符就谈不上回文串了,既然有删除,那估计考察的不是回文串,而是其他的,但是这个东西又有回文串的特点,细想一下——那就是不连续的回文串,想到不连续,就容易使人想到最长公共子序列,把源字符串逆序之后对比两个字符串发现:我靠,这不就是求两个序列的最长公共子序列(好像跟回文串没多大关系)。
考察:回文串,动态规划,知识迁移
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的必胜策略下第一步应该取?