算法
文章平均质量分 69
groovy2007
这个作者很懒,什么都没留下…
展开
-
找到邻接矩阵中出度为0入度为V-1的顶点
要求时间复杂度为O(V)。假设邻接矩阵为g,g[i][j]表示顶点i到顶点j有一条边,那么我们要找的就是这样一个i:第i行全部为0,且第i列除了g[i][i]之外全部为1。我们随便选一对i和j,如果g[i][j]为1的话,那么可以划掉第i行(也就是排除掉了i),如果g[i][j]为1,那么就可以划掉第j列。只要检查一个格子就可以排除掉一个选项,所以运行时间为O(V)。def find(g): n = len(g) vertices = list(range(n)) while原创 2021-03-26 03:29:00 · 626 阅读 · 0 评论 -
Codility题解之MaxNotPresent
Codility challenge: Germanium 2018题目地址https://app.codility.com/programmers/task/max_not_present/桌子上有N张卡片,每个卡片正反面都有一个正整数,可以随意翻转卡片,使得最小的没有出现在卡片上方的数字最大。首先,结果一定会小于等于N+1,所以大于N的数字不用考虑。解法用到了并查集和树的知识。如...原创 2019-12-07 13:46:59 · 455 阅读 · 0 评论 -
程序员代码面试指南之单调栈结构
题目来《程序员代码面试指南》第2版,作者左程云。对于一个数组(可能有重复元素),对于每个元素arr[i],找到它左边和右边小于arr[i]且离i最近的元素下标,找不到时返回-1。书中为了克服相同元素带来的麻烦,使用了一个stack<list>,其实不需要,stack<int>即可。分析:利用一个非递减的单调栈(即允许重复元素的递增栈)。对于任意两个元素arr[j],...原创 2019-10-24 12:27:59 · 346 阅读 · 0 评论 -
美团Codem编程比赛资格赛:数码
题目描述CodeM美团点评编程大赛资格赛时间限制:1秒空间限制:32768K给定两个整数 l 和 r ,对于所有满足1 ≤ l ≤ x ≤ r ≤ 10^9 的 x ,把 x 的所有约数全部写下来。对于每个写下来的数,只保留最高位的那个数码。求1~9每个数码出现的次数。输入描述: 一行,两个整数 l 和 r (1 ≤ l ≤ r ≤ 10^9)。输出描述: 输出9行。第原创 2017-06-20 17:10:17 · 949 阅读 · 0 评论 -
leetcode 644: 子数组的最大平均值
长度为n的数组,找出所有长度至少为k的子数组中,平均值最大的,输出这个最大的平均值。解法:用二分法查找平均值x,对于每个x去检查是否有子数组的平均值大于x。对于一个给定的x,首先将数组的所有元素减去x,然后看是否有子数组的和大于0即可。用数组S记录a[0]...a[i]的累加和,生成S的时候顺便记录前面的最小的S[j],看看S[i]-S[j]是否大于0即可。代码见官方示例。原创 2017-07-18 21:59:24 · 1958 阅读 · 0 评论 -
LeetCode问题选
174 Dungeon Game题目链接 解题思路:动态规划。但是从左上角开始计算是不可行的,从右下角开始却是可以的,时间复杂度O(m*n)。参考解答164 Maximum Gap题目链接解题思路:找到最小和最大值minVal,maxVal,让后将整个区间分成n-1段,记录每段的最大值和最小值。那么最大的gap至少等于区间的长度,然后只要考察区间之间的gap即可。参考解原创 2015-03-11 17:27:24 · 514 阅读 · 0 评论 -
二分查找中的循环不变式
以下代码来自python标准库,查找有序数组中第一个大于或等于x的元素位置,填加了一些注释。a[lo:hi](左闭右开)是待查找的区间,循环不变式为:lo左边的元素全部严格小于x,hi及hi右边的元素全部大于等于x。当循环结束时,lo==hi,根据循环不变式,可知hi为第一个大于等于x的元素。bisect_left(a, x, lo, hi): #assume a[lo-1]原创 2017-10-22 12:08:21 · 5207 阅读 · 0 评论 -
算法导论习题解-第22章基本的图算法
总结深度优先搜索按照访问顺序,每个顶点标记两个序号,首次访问时的次序,以及探索完该顶点所有分支时的次序。边可以分成四种:树边,前向边,后向边(回边),横向边。(图片来自 算法概论 by dasgupta)有向无环图和拓扑排序有向图有环当且仅当DFS过程中遇到回边。 有向无环图中每一条边都指向一个finish值更小的顶点。 对于DFS,无环性、可线性化、无回边三者是等价的。...原创 2014-08-01 19:56:29 · 8128 阅读 · 1 评论 -
算法知识及有用链接
树状数组(binary indexed tree)RMQ segment tree的实现(不带update),通常的实现是通过一个辅助函数以及递归操作,比如gist上有一个带update的python实现。另外一种实现是通过类似堆的方式表示树,通过位操作访问父节点或子节点,效率非常高,强烈推荐这篇文章,不仅给出了详细的解释,还对各种变体给出了方案。二分图最大匹配的König定理及其证明跳跃表Sk...原创 2015-05-20 10:36:42 · 529 阅读 · 0 评论 -
题目:Median of Two Sorted Arrays
题目来自Leetcode: There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).思路很显然,在一个数组中使用二分法,查找元原创 2015-02-11 17:22:27 · 491 阅读 · 0 评论 -
题目:海岸线长度
You will be given a map of Soteholm as an N×M grid. Each square in the grid has a side length of 1 km and is either water or land. Your goal is to compute the total length of sea coast of all islands.原创 2014-12-12 21:13:36 · 1452 阅读 · 0 评论 -
算法导论笔记(1)
习题5.3-5 从n^3个数字中进行放回抽样,共抽nci原创 2014-05-14 18:09:16 · 727 阅读 · 0 评论 -
算法导论之最长递增子序列
习题15.4-5,15.4-6长度为n的shu'z原创 2014-06-11 20:47:12 · 782 阅读 · 0 评论 -
算法导论习题解-第18章B树
习题编号以第3版为准#18-2 连接与分裂2-3-4树原创 2014-07-29 22:05:59 · 1064 阅读 · 0 评论 -
算法导论习题解-第21章用于不相交集合的数据结构
习题编号以第3版为准#21-3 Tarjan的原创 2014-07-29 22:11:35 · 1572 阅读 · 0 评论 -
算法导论习题解-第17章摊还分析
TODO原创 2014-07-26 18:32:27 · 8267 阅读 · 0 评论 -
算法导论习题解-第23章最小生成树
#23.1-1设(u,v)是连通图G中权重最小的边,证明(u,v)是某棵最小生成树的边。解:将Vge原创 2014-08-05 19:47:12 · 10351 阅读 · 2 评论 -
算法导论习题解-第24章单源最短路径
#24.1-3 BELLMAN_FORD算法提前终止解:原创 2014-08-11 22:32:18 · 1909 阅读 · 0 评论 -
Algorithms 第4版 by Sedgewick 笔记
1.3算术表达式求值的双栈算法原创 2014-11-07 00:03:03 · 787 阅读 · 0 评论 -
算法导论习题解-第16章贪心算法
习题编号以第三版为准。原创 2014-07-26 16:50:16 · 19185 阅读 · 0 评论 -
算法导论习题4-5:芯片检测
2019.11.14更新: 修正了方法1里的一个错误,增加了方法3。习题4-5 3rd edition (4-6 2nd edition)Diogenes 教授有n个被认为是完全相同的VLSI芯片,原则上它们是可以互相测试的。教授的测试装置一次可测试二片,当该装置中放有两片芯片时,每一片就对另一片作测试并报告其好坏。一个好的芯片总能够正确的报告另一片的好坏,但一个坏的芯片的结果就是不可靠的...原创 2014-05-13 22:32:20 · 4238 阅读 · 0 评论