2016腾讯春招的编程题

话不多说,直接上题!!!

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

代码实现:

function solution ($str){
$res=strrev($str);
$len=strlen($str);
$data=array();
for ($i = 0; $i < $len; $i++)
for($j=0 ; $j< $len;$j++){
$data[$i][$j]= 0;
}
//开始查找
for($i=1;$i<$len+1;$i++){
for($j=1;$j<$len+1;$j++){
if($str[$i-1] == $res[$j-1]){
$data[$i][$j]=$data[$i-1][$j-1] +1;
}
else if($data[$i-1][$j] >= $data[$i][$j-1]){
$data[$i][$j] = $data[$i-1][$j];
}
else{
$data[$i][$j] = $data[$i][$j-1];
}
}
}
print_r($data);
//其中$data[$len][$len]j即为最大子串
return $len - $data[$len][$len];
}
//echo solution('google');
  • 把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
这道题感觉上必上题好理解一点,起码自己脑袋里面有个大概的概念,请注意是不能再申请空间(即使是数组+1),所以要求我们在整个array中进行遍历。基本思路是先找出大写字母的后一个字母,若是小写就交换,大写就记录下位子,指针再后移,直到是小写字母为止,然后遍历交换元素位子,指针是永远指向第一个大写字母的。

  代码实现:

function solution2($str){
function checkcase($s){
if(preg_match('/^[a-z]+$/', $s)){
return 1;
}else if(preg_match('/^[A-Z]+$/', $s)){
return 2;
}
}
for($i=0;$i<strlen($str);$i++){
if(checkcase($str[$i]) ==2){
for($j=$i+1;$j<strlen($str);$j++){
$t=$j;
if(checkcase($str[$j]) ==1){
for($l=$t;$l>=$i+1;$l--){
$tem=$str[$l];
$str[$l]=$str[$l-1];
$str[$l-1]=$tem;
}
break;
}
else{
//echo $j.','.$t;
}
}
} }
return $str;
}
echo solution2("AkleBiCeilD");
  • 蛇形矩阵作为一种常用的数学数列,是由1开始的自然数一次排列成的一个N*N的正方形矩阵,数字一次由外而内的递增,输入蛇形矩阵宽度N,输出整个蛇形矩阵结果,注意输出格式要求按照矩阵从上至下的依次按行输出,每行中间无需换行输出。eg:样本输入: 3样本输出: 1 2 3 8 9 4 7 6 5
直接按照上、右、下、左的顺序进行遍历,计算好遍历层数就OK了.我们可以拓展到n行,m列的蛇形矩阵,其中有个规律就是遍历的层数,为(行数+1)/2的向下取整。记住这个,然后细心再细心就好。

 代码实现:

function snake($row = 3, $col = 3){
$res = array();
// 初始值
$start = 1;
// 当前遍历层数
$flag = intval(($row + 1) / 2); for ($i = 1; $i <= $flag; $i++) {
$startx = $i - 1;
$starty = $i - 1;
$width = $col - $i + 1;
$height = $row - $i + 1;
// 上
for ($u = $starty; $u < $width; $u++) {
$res[$startx][$u] = $start;
$start += 1;
}
// 右
for ($r = $startx + 1; $r < $height; $r++) {
$res[$r][$u-1] = $start;
$start += 1;
}
// 下
for ($d = $u - 1 - 1; $d >= $starty; $d--) {
$res[$r-1][$d] = $start;
$start += 1;
}
// 左
for ($l = $r - 1 - 1; $l >= $startx + 1; $l--) {
$res[$l][$d+1] = $start;
$start += 1;
} } // 输出
for ($i = 0; $i < $row; $i++) {
for ($j = 0; $j < $col; $j++) {
echo $res[$i][$j] . " ";
}
} } snake();
时间复杂度:

首先列出时间复杂度。第一个是O(n^2)这没啥说的。

第二个是说白了就是个冒泡的,但最里层嵌套是和大写字母的个数m有关系,所以为(n*m)。
第三个我看了半天,应该是O(n)吧,要是不对,欢迎大家指正。

总结

以前的我天真的认为只要在大学期间做足够的项目经验,就可以找到份不错的工作,我承认我并不是像一些真正的大牛,对program抱有极大的兴趣。

这点很重要,我们学生时代的项目再多,大多数是写业务逻辑。并不能接触到算法和架构等高端的应用场景,而大公司可以!

腾讯2016校招编程题【PHP实现】的更多相关文章

  1. JavaScript编程题(含腾讯2016校招题)

    作者:ManfredHu 链接:http://www.manfredhu.com/2016/04/02/15-veryGoodForUsing/ 声明:版权所有,转载请保留本段信息,否则请不要转载 几 ...

  2. 拼多多2018校招编程题汇总 Python实现

    题目原址 列表补全 在商城的某个位置有一个商品列表,该列表是由L1.L2两个子列表拼接而成.当用户浏览并翻页时,需要从列表L1.L2中获取商品进行展示.展示规则如下: 用户可以进行多次翻页,用offs ...

  3. 记2016腾讯 TST 校招面试经历,电面、笔试写代码、技术面、hr面,共5轮

    (出处:http://www.cnblogs.com/linguanh/) 前序: 距离  2016 腾讯 TST 校招面试结束已经5天了,3月27日至今,目前还在等待消息.从投简历到两轮电面,再到被 ...

  4. 京东校招笔试(C++方向)编程题

    这次笔试是今年校招我参加的第一次笔试..出了很多状况,基础知识不扎实,导致选择题耽误了太多时间,导致后面的题目没做完,编程题也没有在 时间内写出来,基本没有面试机会了.不过我继续研究第二个编程题,在1 ...

  5. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

  6. 去哪儿网2017校招在线笔试(前端工程师)编程题及JavaScript代码

    编程题很简单.整个试卷结构为: 一.问答题: 对前端的理解,了解哪些框架库? 二.在线编程题:身份证分组 如下第一道:身份证分组 三.在线编程题:身份证分组.统计字符.酒店价格(三选二) 如下第二三四 ...

  7. 网易2019校招内推编程题-瞌睡-C++实现

    [编程题] 瞌睡 时间限制:1秒 空间限制:262144K 小易觉得高数课太无聊了,决定睡觉.不过他对课上的一些内容挺感兴趣,所以希望你在老师讲到有趣的部分的时候叫醒他一下.你知道了小易对一堂课每分钟 ...

  8. 网易2019校招内推编程题-俄罗斯方块-C++实现

    [编程题] 俄罗斯方块 时间限制:1秒 空间限制:262144K 小易有一个古老的游戏机,上面有着经典的游戏俄罗斯方块.因为它比较古老,所以规则和一般的俄罗斯方块不同.荧幕上一共有 n 列,每次都会有 ...

  9. 网易2018校招内推编程题-堆棋子-C++实现

    链接:https://www.nowcoder.com/questionTerminal/27f3672f17f94a289f3de86b69f8a25b来源:牛客网 [编程题]堆棋子 热度指数:14 ...

随机推荐

  1. Mina初识

    1.概述 1.1 Apache的顶级项目,基于java NIO,支持TCP/IP.UDP/IP: 1.2 Mina对外屏蔽了java NIO使用的复杂性,并在性能上做了不少的优化: 1.3 Mina采 ...

  2. Centos 添加swap

    swap是linux系统的虚拟内存,物理内存不足时,会用到.生产环境,最好添加上,以防内存异常暴增时,系统出现问题. 查看系统是否有swap分区,执行如下命令,若Swap那一行都为0,则表示没有Swa ...

  3. windows删除指定日期前的文件

    @ echo offforfiles /p .\ /s /m 2008*.* /d -7 /c "cmd /c echo @file>>.\del.txt"forfil ...

  4. windows 系统 python3.5安装 lxml 库

    有个提示uable find vc***,的错误,如果按照修改python脚本的方法会发现还需要安装VS,安装好了还不一定可以解决问题. 费了半天劲,结合网络上部分信息终于找到了解决方案: 1.打开文 ...

  5. HTML5之WebSocket && https://zhuanlan.zhihu.com/p/23467317

    在认识websocket之前,我们必须了解的是websocket有什么用? 他能解决我们遇到的什么问题? 如果没用,那么我们就么有使用它的必要的. websocket就是建立起全双工协议的,提高了效率 ...

  6. 生产者与消费者模式-阻塞 wait,notify

    设计思路:生产者push ,消费者 拿,篮子装,syncstack先进后出,while 判断 index=0 wait,      当 Producer生产了 并push到篮子里  notify(唤醒 ...

  7. bootstrap的datepicker使用(1.将默认的英文设置为中文2.选择日月年的时候记录之前的操作)

    参考网页    bootstrap datepicker 属性设置 以及方法和事件 1.如何将bootstrap的datepicker默认的英文设置为中文 第一步,新建一个js文件(bootstrap ...

  8. 【VMware】无法连接MKS:套接字连接尝试次数太多;正在放弃

    启动我的电脑 -> 右键 -> 管理 -> 服务和应用程序 -> 服务: 将当前服务全部进行启动

  9. Nginx反向代理、负载均衡功能

    环境: [root@db02 ~]# uname -a Linux db02 -.el6.x86_64 # SMP Tue Mar :: UTC x86_64 x86_64 x86_64 GNU/Li ...

  10. 正则表达式过滤联系方式,微信手机号QQ等

    有些输入不允许用户输入联系方式.可以使用以下正则表达式来判断是否输入敏感信息 var reg = new RegExp("(微信|QQ|qq|weixin|1[0-9]{10}|[a-zA- ...