【九章算法】经典题目

九章算法面试题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)以内。
四分线段树 或横纵剖分线段树



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


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值