腾讯2016春招之算法编程解析

第一道题:求有删除情况的最长回文子串

题目:

解题思路:

这个题严格意义上来说,删除了字符就谈不上回文串了,既然有删除,那估计考察的不是回文串,而是其他的,但是这个东西又有回文串的特点,细想一下——那就是不连续的回文串,想到不连续,就容易使人想到最长公共子序列,把源字符串逆序之后对比两个字符串发现:我靠,这不就是求两个序列的最长公共子序列(好像跟回文串没多大关系)。

考察:回文串,动态规划,知识迁移

 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的必胜策略下第一步应该取?

时间: 2024-10-11 01:55:33

腾讯2016春招之算法编程解析的相关文章

腾讯2015春招pc客户端开发练习卷

1.下列说法错误的有() A.  在类方法中可用this来调用本类的类方法 B. 在类方法中调用本类的类方法时可直接调用 C. 在类方法中只能调用本类中的类方法 D.  在类方法中绝对不能调用实例方法 答案:ACD A 首先要清楚,类方法指的是,用static修饰的静态方法,众所周知,静态方法是不包含this指针的,因为它不属于某一个具体的对象所有 C 类方法可以不必实例化而直接调用,所以,类方法可以调用其他类的类方法 D (参考别人的,我也觉得说的很有道理)可以在类方法中先实例化对象,然后调用

java - 算法 - 腾讯2018春招

1.小Q定义了一种数列称为翻转数列:给定整数n和m, 满足n能被2m整除.对于一串连续递增整数数列1, 2, 3, 4..., 每隔m个符号翻转一次, 最初符号为'-';.例如n = 8, m = 2, 数列就是: -1, -2, +3, +4, -5, -6, +7, +8.而n = 4, m = 1, 数列就是: -1, +2, -3, + 4.小Q现在希望你能帮他算算前n项和为多少. 输入描述: 输入包括两个整数n和m(2 <= n <= 109, 1 <= m), 并且满足n能被

2016春招Android开发实习生(网易传媒)笔试

一.单选题 1.下列不属于网络层协议的为 TCP IP IPX ICMP 2.关于activity的状态恢复,错误的是 onSaveInstanceState中,activity会自动收集恢复view树中所有控件的状态 activity的成员变量需要手动保存恢复 自定义View控件可以实现onRestoreInstanceState和onSaveInstanceState供activity进行状态回调 onSaveInstanceState并不适合保持持久化数据 3.在发布-订阅(publish

SuperHakce 春招备战算法实践之堆排序

HeapSort 堆排序 堆排序是一种树形选择排序方法,它的特点是:在排序的过程中,将array[0,...,n-1]看成是一颗完全二叉树的顺序存储结构,利用完全二叉树中双亲节点和孩子结点之间的内在关系,在当前无序区中选择关键字最大(最小)的元素. 1. 若array[0,...,n-1]表示一颗完全二叉树的顺序存储模式,则双亲节点指针和孩子结点指针之间的内在关系如下: 任意一节点指针 i:父节点:i==0 ? null : (i-1)/2  左孩子:2*i + 1  右孩子:2*i + 2 2

360春招技术岗编程题

360公司 2018校招 技术综合G卷在线考试编程题| 30.0分3/3[本题为选答题]奇异 长度(Web)时间限制:C/C++语言 1000MS:其他语言 3000MS内存限制:C/C++语言 65536KB:其他语言 589824KB 题目描述:给你一个图,0节点连接这一个联通块a,1节点连接着一个联通块b,ab仅由01这条边相连.现在我们定义奇异路径为恰好经过0-1这条边一次的路径,其他边可以经过任意次,且路径不带方向,1-2-3与3-2-1认为是两条路径.重边也算多条路.在这个图中有无数

腾讯笔试题——腾讯2015春招pc客户端开发练习卷

1. C++题目 静态成员函数(类方法) 下列说法错误的有( ) 正确答案: A C D   你的答案: C D (错误) 在类方法中可用this来调用本类的类方法 在类方法中调用本类的类方法时可直接调用 在类方法中只能调用本类中的类方法 在类方法中绝对不能调用实例方法 解析: 成员方法又称为实例方法 静态方法又称为类方法 其次: a,静态方法中没有this指针 c,可以通过类名作用域的方式调用Class::fun(); d,太绝对化了,在类中申请一个类对象或者参数传递一个对象或者指针都可以调用

试卷: 腾讯2015春招web前端开发练习卷

1  jquery ajax中都支持哪些返回类型? dataType (default: Intelligent Guess (xml, json, script, or html)) Type: String The type of data that you're expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the res

美团2020春招 笔试算法题 最好一样

题目描述 给出一个序列包含n个正整数的序列A,然后给出一个正整数x,你可以对序列进行任意次操作的,每次操作你可以选择序列中的一个数字,让其与x做按位或运算.你的目的是让这个序列中的众数出现的次数最多. 请问众数最多出现多少次. 输入 输入第一行仅包含两个正整数n和x,表示给出的序列的长度和给定的正整数. (1<=n<=100000,1<=x<=1000) 接下来一行有n个正整数,即这个序列,中间用空格隔开.(1<=a_i<=1000) 输出 输出仅包含一个正整数,表示众

腾讯2016校招编程题【PHP实现】

2016腾讯春招的编程题 话不多说,直接上题!!! 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数 . 这道题是以回文为载体,考察两个字符间的最大子串,最大子串算法在表示字符串的关联度上用途很广泛. 而遮到题就是字符串的长度减去其和翻转字符串的长度的最大子串即可.最长子串的算法我一开始也是蒙的.这完全没没思路呀. 后来看到一篇blog,才明白最长子串,好的,最后我们形成代码 代码实现: function solution