超全的数据结构、算法和搜索排序编程笔试题

匿名网友 匿名网友 发布于: 2016-01-12 00:00:00
阅读 152 收藏 0 点赞 0 评论 0

  • 最少时间复杂度求数组中第k大的数,写code
    • 快速选择(见指南)
  • 去除字符串S1中的字符使得最终的字符串S2不包含’ab’和’c’,写code
    • 逻辑题目,按照题意写即可
  • 长度为N的序列Sequence=abc….Z,问有多少不同的二叉树形态中序遍历是这个,写递推公式
    • $2^N$ 种,从 a 开始,往后加入一个新的字符,之前的每一个种可能都可以作为下一个的左子树或者根节点,也就是每个可能在都会变成两种可能,故可得递推公式
  • 给定整数n和m,问能不能找出整数x,使得x以后的所有整数都可以由整数n和m组合而成
    • 这个组合的具体意思不明确,如果是相加的话,我感觉是不能找到这个 x
  • 中序遍历二叉树,利用O(1)空间统计遍历的每个节点的层次,写bug free的code
    • 存每一层的数目至少需要一个数组,应该是额外空间是 O(1),那么在递归的时候加上一个标志,每次访问全局变量更新即可
  • 排序二叉树转双向链表
    • 递归,每次访问叶子节点进行链表构建
  • 一个运算序列只有+、*、数字,计算运算序列的结果
    • 堆栈,优先级测试
  • 100亿数字,怎么统计前100大的?
    • 最大堆,下移,优先队列,用数组模拟
  • 实现 java.util.List 中的基础功能;
    • 基本逻辑
  • 实现栈,使得 添加、删除、max 操作的复杂度为 O(1)
    • max stack
  • 选取任意数据结构实现添加、删除、随机返回三个功能,分析复杂度;
    • 基本功
  • 用数组实现队列,各操作的复杂度分析。
    • 基本操作逻辑
  • 两棵树相加——对应位置两棵树都有值则相加,对应位置只有一棵树有值则取该值;
    • 递归,两个参数
  • 用速度不同的指针可以判断链表中是否有环,问两速度满足怎样的关系可以保证发现环;
    • 一个一次走俩,一个一次走一个
  • 如何在语料中寻找频繁出现的字串,分析复杂度
    • trie树;
  • 中缀表达式转逆波兰表达式,逆波兰表达式求值;
    • 堆栈即可
  • 数据解压缩,3(a4(ab)) -> aababababaababababaabababab;
    • 堆栈即可
  • 二叉树的文件存储
    • 存前序+中序
  • 实现快速排序、归并排序、堆排序,各排序算法复杂度分析;
    • 基本功
  • 实现KMP,解释原理;
    • 这个暂时不弄
  • 迷宫的深度搜索、广度搜索;
    • 基本算法描述
  • 写 find 函数,在目标串中匹配模式串(要考虑中文字符的情况)
    • 找子字符串
  • 数列中找第 k 大的数字(与快排或堆排序有关)
    • 快速选择
  • 一维数组,swap 其中的几对数字(每个数字只属于一次 swap 操作),实现查找(与二分有关);
  • 一个有序数组,其中一个数字发生变异,但不知道变异后会不会影响整体序,如何实现查找;
  • 二维数组,每行递增,每列递增
    • 实现查找;
    • 求第 k 大的数;
    • 任意交换其中的两数,发现并恢复;
  • 寻找字符串中第一个只出现一次的字符;
    • 哈希 遍历一次
  • 统计数列中的逆序对(归并排序有关);
  • 最长公共子串(动态规划有关);
    • LCS
  • 最大子序列和,允许交换一次的最大子序列和;
  • 给定数组,寻找 next big(堆排序有关);
  • 一维有序数组,经过循环位移后,最小的数出现在数列中间
    • 如果原数组严格递增,如何找这个最小数;
    • 如果原数组严格递增或递减,如何找这个最小数;
    • 如果原数组非严格递增或递减,如何找这个最小数;
    • 二分变种
  • 数组可能是递增、递减、递减后递增、递增后递减四种情况,递增递减都是非严格的,如果有转折点,返回转折点的值,否则返回-1;
    • 二分来判断
  • 有序数组寻找和为某数的一对数字;
    • 2 SUM 哈希
  • 墙里能装多少水;
    • 左右动态规划
  • 打印螺旋数组;
    • 基本逻辑操作
  • 打印组合数;
    • 递归,自顶向下
  • 字符数组,统计指定区间内的回文串个数。
    • 中间来找,manacher
  • 一道概率题,54张牌,平均分成三堆,大小王在同一堆的概率?(17/53)
    • 3* C(18,2) / C(54,2)
  • 问了一个概率题 54张牌,分成6份,每份9张牌,大小王在一起的概率(我算错了,他告诉我是 8/53)
    • 6 * C(9,2) / C(54, 2)
  • 什么样的数据结构可以满足多次插入删除,取最小数,给出时间复杂度。我的回答是小顶堆,建立小顶堆的时间复杂度是O(nlogn),之后每次插入删除的时间复杂度是O(logn)。
  • 链表逆序,翻转链表
    • 基本功
  • 描述Dijkstra最短路径算法
    • 基本功
  • 一道组合数学题。10盏灯,灭三盏,两头的必须亮着,不能灭掉相邻的两盏灯,问组合数?C(6,3) = 20 。
  • 字符串转整数
    • 基本功
  • 有25匹马 ,5个跑道,一次只能比5匹马,得到跑得最快的前3,至少需要比几次?7次
  • 一个文件中包含超大的N个数,求最大的K个数?
    • 最小堆,时间复杂度为N log k
  • 一个数据流中,如何采样得到100个数,保证采样得到的100个数是随机的?蓄水池抽样算法
  • 平衡二叉树是什么
    • 基本功
  • 给了一个链表,第1个结点标号为1,把链表中标号在M到N区间的部分反转
    • 基本功

评论列表
文章目录