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

  • 相关阅读:
    Python入门11 —— 基本数据类型的操作
    Win10安装7 —— 系统的优化
    Win10安装6 —— 系统的激活
    Win10安装5 —— 系统安装步骤
    Win10安装4 —— 通过BIOS进入PE
    Win10安装2 —— 版本的选择与下载
    Win10安装1 —— 引言与目录
    Win10安装3 —— U盘启动工具安装
    虚拟机 —— VMware Workstation15安装教程
    Python入门10 —— for循环
  • 原文地址:https://www.cnblogs.com/bakari/p/5358257.html
Copyright © 2020-2023  润新知