九章算法面试题42 构造MaxTree

增长序列: 从左到右扫描和从右到左,分别记录每个节点左边第一个比自己大的元素,右边第一个。。(使用栈,小于自己的弹出) O(n)。 然后把左右之间较小的那个元素作为自己的父节点。

九章算法面试题37 主元素

初阶:采用抵消法+线性扫描, 一遍就能定位到超过1/2的元素
进阶:对1/k次出现的广义主元素,采用k分组。抵消没有重复出现的元素。

九章算法面试题30 最短距离和

初阶:在一个n*m的矩阵中,有k个点,求矩阵中距离这k个点的距离和最近的点。

注:这里的距离采用曼哈顿距离——|x0-x1| + |y0-y1|

进阶:如果要求这个点与所给的k个点不重合,该怎么办?

堆辅助宽搜(O(k*lgk), 取决于所给的特定点个数), 或者线性扫描(O(n*m), 事先预处理每个行列对应的特定点个数,这样每次计算a[i][j]都是O(1)复杂度,总复杂度O(n*m) )

九章算法面试题29 子矩阵的最大公约数

给定n*n的矩阵,需要查询任意子矩阵中所有数字的最大公约数。请给出一种设计思路,对矩阵进行预处理,加速查询。额外的空间复杂度要求O(n^2)以内。

四分线段树 或横纵剖分线段树

九章算法面试题27 最大连续子集

九章算法面试题26 方格取数

初阶:二维dp
进阶:最小费用最大流解法

九章算法面试题22 扔棋子

二维动态规划解法
cnt[floor][bead] = E ( 1 + max( cnt[ i<floor] [ bead-1], cnt[ floor - 1 - i ][bead ] ) ), 代表的在i+1层扔珠子,结果要么是在 i+2~floor之间(没碎),要么在1~i层之间(碎了)。
其中floor为层数,bead为珠子个数,cnt[floor][bead]为最少投多少次。 
初始: cnt[1][n] = 1.
求 cnt[100][2] 到 cnt[100][n].

九章算法面试题21 寻找最近单词对

初阶:有一篇包含N个单词的文章和M个单词对,对于每个单词对,如果他们在文章中都出现了,求出他们在文章中的最近距离。例如文章为:ABBCABC,那么对于单词对(A,C)的最近距离是1(最后的ABC,A必须在C的前面)

进阶:假设N和M都是海量数据,有什么好的方法可以优化?

考虑 1 AC自动机进行多个目标字符串的查找; 或map reduce对多个字符串查找位置。 2 建立索引。 3 两个索引列表之间查找最小距离。可以线性扫描或二分。

九章算法面试题20 寻找重复的URL

给定A、B两个大文件,各存放50亿个url,每个url各占256字节,内存限制是4G,让你找出同时在A和B中出现的url。

方法1:使用BloomFilter(一种类似于hash表但比hash表占用空间更小的查重数据结构),通过K个不同的hash函数,将5G个URL映射到32G个bit位上,当且仅当K个hash函数得到的bit位上都是1时,代表该url重复出现。一般来讲K取8。该方法存在精度损失。时间复杂度O(n)

方法2: 一次hash分解文件(map),再一次hash扫描处理小文件(reduce)

九章算法面试题10 赛马

有25匹马,有一个5个赛道的马场,每场比赛可以决出5匹马的排名,假设每匹马发挥稳定,且不会出现名次相同的情况。问:如果要知道25匹马中跑得最快的马,需要几场比赛?如果需要知道跑得第二快的马,需要几场比赛?第三快的呢?

一个5*5矩阵,保存前六场比赛结果(5行+第1列),显然左上角是第一, 然后往右和往下可能的最小名次依次增大(增长矩阵),显然有a[i][j]对应的马的名次最小的可能名次第i+j+1.
对于第三名,从增长矩阵可以看出潜在竞争者有5个,只需要再一场比赛就能找出来。所以6+1 = 7场比赛。

九章算法面试题9 前k大的和

初阶:有两个数组A和B,每个数组有k个数,从两个数组中各取一个数加起来可以组成k*k个和,求这些和中的前k大。

进阶:有N个数组,每个数组有k个数,从N个数组中各取一个数加起来可以组成k^N个和,求这些和中的前k大。

链式计算: 先对前两个数组求前k大和,将结果与第三个数组求前k大和,然后第四个……直到第N个 ,中间用到堆辅助宽搜

代码 https://code.csdn.net/snippets/527307

九章算法面试题8 第k大的数

初阶:有两个数组A和B,假设A和B已经有序(从大到小),求A和B数组中所有数的第K大。
进阶:有N台机器,每台机器上有一个有序的大数组,需要求得所有机器上所有数中的第K大。注意,需要考虑N台机器的并行计算能力。

进阶:两层二分。首先二分n;然后在每个机器上二分统计比n大的数个数,汇总并二分调整n

九章算法面试题2 抄书问题

有n本书和k个抄写员。要求n本书必须连续的分配给这k个抄写员抄写。也就是说前a1本书分给第一个抄写员,接下来a2本书分给第二个抄写员,如此类推(a1,a2需要你的算法来决定)。给定n,k和每本书的页数p1,p2..pn,假定每个抄写员速度一样(每分钟1页),k个抄写员同时开始抄写,问最少需要多少时间能够讲所有书全部抄写完工?(提示:本题有很多种算法可以在不同的时间复杂度下解决,需要尽可能的想到所有的方法)

解法1:动态规划

解法2;动态规划+决策单调。

同上一解法,但在x的枚举上进行优化,设s[i][j]为使得f[i][j]获得最优值的x是多少。有s[i][j-1]>=s[i][j]>=s[i-1][j]。因此x这一层的枚举不再是每次都是n而是总共加起来n。

解法3: 二分法+贪心

数据结构

  • 矩阵 (6)
  • 指针 (4)
  • 分布式系统 (1)
  • 数组 (3)
  • 堆 (2)
  • 哈希 (5)
  • 字符串 (1)
  • 链表 (1)
  • 二叉树 (1)
  • 队列 (1)

面经算法

  • 贪心 (2)
  • 二分法 (9)
  • 随机数生成 (2)
  • 线段树 (1)
  • Lossy Counting (1)
  • BloomFilter (1)
  • 二进制 (2)
  • 芯片测试 (1)
  • 智力题 (3)
  • 递归 (1)
  • 数论 (1)
  • Map-Reduce (3)
  • 大数据 (3)
  • Sticky Sampling (1)
  • 排序 (2)
  • 构造 (1)
  • 栈 (4)
  • 动态规划 (7)
  • 搜索 (1)
  • 概率 (1)
  • system design (1)
  • 深度优先搜索 (1)

【九章算法】经典题目相关推荐

  1. 九章算法【总结】Java 搞定链表-面试常考题目精选

    面试大总结之链表 CS3K.com 一.OverView: 链表是面试中常考的,本文参考了其它一些文章,加上小编的自己总结,基本每个算法都测试并优化过. 算法大全(1)单链表 中还有一些链表题目,将来 ...

  2. 九章算法-面试题总结(算法、强化算法、系统设计高清视频观看)

    1 落单的数 题目描述: 有2n+1个数,其中2n个数两两成对,1个数落单,找出这个数.要求O(n)的时间复杂度,O(1)的空间复杂度. 进阶问题:如果有2n+2个数,其中有2个数落单,该怎么办? 分 ...

  3. 分治习题--九章算法培训课第三章笔记

    1.Maximum Depth of Binary Tree 这是道简单的分治习题了 分: 左子树最大深度 右子树最大深度 治: 最大深度等于max(左子树,右子树)+1 public class S ...

  4. 编号是i的结点所在的层次号是_九章算法 | 微软面试题:二叉树的锯齿形层次遍历...

    给出一棵二叉树,返回其节点值的锯齿形层次遍历(先从左往右,下一层再从右往左,层与层之间交替进行) 在线评测地址:LintCode 领扣 样例 1: 输入:{1,2,3} 输出:[[1],[3,2]] ...

  5. 多个数字数组_九章算法 | 谷歌面试题:多个数组的交集

    给出多个数组,求它们的交集.输出他们交集的大小. 在线评测地址:LintCode 领扣 样例 1: 输入: [[1,2,3],[3,4,5],[3,9,10]]输出: 1解释:只有3出现在三个数组中. ...

  6. arrays合并两个数组_九章算法 | 字节跳动面试题:合并k个排序数组

    将 k 个有序数组合并为一个大的有序数组. 在线评测地址:LintCode 领扣 样例 1: Input: [[1, 3, 5, 7],[2, 4, 6],[0, 8, 9, 10, 11]] Out ...

  7. n皇后问题c语言_九章算法 | N皇后问题

    n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(任意两个皇后不能位于同一行,同一列,同一斜线). 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的 ...

  8. 匹配左括号或者右括号js_九章算法 | 蚂蚁金服面试题:有效的括号字符串

    [题目描述] 给定一个只包含三种类型字符的字符串:'(',')'和 '*', 编写一个函数来检查该字符串是否有效. 我们通过以下规则定义字符串的有效性: 1.任何左括号 '('必须有一个相应的右括号' ...

  9. 八皇后时间复杂度_九章算法 | N皇后问题

    n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(任意两个皇后不能位于同一行,同一列,同一斜线). 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的 ...

  10. 九章算法 | Google 面试题:Same Number

    撰文 | JZ 专栏 | 九章算法 题目描述 给一个数组,如果数组中存在相同数字,且相同数字的距离小于给定值k,输出YES,否则输出NO. 思路点拨 用HashMap记录每个元素最后一次出现的位置,遍 ...

最新文章

  1. 服务器技术综述(三)
  2. Maven 排除依赖jar包
  3. 保护 wp cron.php,wp-cron.php任务的定时执行和控制
  4. css 竖行进度图_css实现横向与竖向进度条效果的方法
  5. AndroidStudio JNI: 使用CMake编译tensorflow
  6. PbootCMS是全新内核且永久开源免费的PHP企业网站开发建设管理系统
  7. window.onload中调用函数报错的问题
  8. Java实现可视化迷宫
  9. SpringMVC连接MongoDB操作数据库
  10. linux 网络io 监控,Linux教程:Linux性能监控-NetworkIO
  11. 阶段3 2.Spring_04.Spring的常用注解_4 由Component衍生的注解
  12. Linux设备驱动——驱动模型
  13. 2021年卡信乐卡盟源码程序
  14. [渝粤教育] 重庆大学 房屋建筑学 参考 资料
  15. ai的预览模式切换_ai预览模式怎么退出
  16. EXCILE 电子表格常见公式
  17. 桌面IE不见的处理方法
  18. 初中计算机面试题目,2019年上半年教师资格证面试《初中信息技术》真题及答案...
  19. C++学习日记——头文件的编写
  20. 计算机二级演示文稿合并PPT,[PPT考点]如何将两个幻灯片合并在一个幻灯片?

热门文章

  1. MATLAB读取结构体mat文件报错已损坏
  2. 嚼得菜根做得大事·《菜根谭》·七
  3. JAVA面试灵魂108问(八)---数据库2(事务)
  4. IM即时通讯设计 高并发聊天服务:服务器 + qt客户端(附源码)
  5. LPSTR/LPCSTR/LPTSTR/HWND/HANDLE/HMODULE/HINSTANCE 等含义和区别
  6. C++获取目标变量的长度及类型转换
  7. c++ bind 函数讲解
  8. 学校邮箱激活idea
  9. 订票助手开发者:用自己的方式来让世界公平一点
  10. pandas美化表格并生成图片