- 博客(34)
- 收藏
- 关注
原创 算法知识及有用链接
树状数组(binary indexed tree)RMQ segment tree的实现(不带update),通常的实现是通过一个辅助函数以及递归操作,比如gist上有一个带update的python实现。另外一种实现是通过类似堆的方式表示树,通过位操作访问父节点或子节点,效率非常高,强烈推荐这篇文章,不仅给出了详细的解释,还对各种变体给出了方案。二分图最大匹配的König定理及其证明跳跃表Sk...
2015-05-20 10:36:42 513
原创 找到邻接矩阵中出度为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 609
原创 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 414
原创 程序员代码面试指南之单调栈结构
题目来《程序员代码面试指南》第2版,作者左程云。对于一个数组(可能有重复元素),对于每个元素arr[i],找到它左边和右边小于arr[i]且离i最近的元素下标,找不到时返回-1。书中为了克服相同元素带来的麻烦,使用了一个stack<list>,其实不需要,stack<int>即可。分析:利用一个非递减的单调栈(即允许重复元素的递增栈)。对于任意两个元素arr[j],...
2019-10-24 12:27:59 333
原创 Visual studio Configuration 和 Platform
0. 工具栏的active选项和Configuration manager顶部的选项是完全一致的,修改其中一个会导致另一个立即变化。1. 变更active选项(即在工具栏下拉列表选择不同的选项)并不会修改sln文件。可能会修改.vs下面的隐藏文件,这样你下次打开vs时会记住上次的选项。2. 每一个active选项对应的是Project Contexts的一个组合。每次选择一个不同的active选项...
2018-03-07 18:20:30 4062
原创 python的实例属性与类属性
不说废话,上代码(python3)。class Cls: common = 7 #静态变量,在Cls的__dict__里面 def __init__(self): #实例方法,在Cls的__dict__里面 self.age = 5 #实例属性,在实例的__dict__ def f(self): #实例方法,在Cls的__dict__里面 ...
2018-03-02 14:37:18 378
原创 Git使用总结
仓库与分支克隆远程仓库: git clone <remote_url>,Clone之后会将远程仓库整个下载下来,并起名origin。另外会建立一个local的master分支(可以认为是把origin/master复制了一份),并与origin/master关联起来。记住,你的所有修改都是针对local branch。查看远程仓库的信息: git remote -v查看local br...
2018-01-22 21:19:21 263
原创 二分查找中的循环不变式
以下代码来自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 4507
原创 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 1948
原创 美团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 939
原创 《写给大忙人看的java SE8》笔记 -- 3. 杂项改进与java7新特性
时间和日期改进所有的java.time对象都是不可变的Instant是时间线上的一个点;Duration是两个Instant之间的时间差;Period类似Duration,考虑到了夏令时,适用于带时区的时间无闰秒,每天都是86400秒LocalDateTime没有时区信息,ZonedDateTime是时区中的一个时间点DateTimeFormatter用来格式化TemporalAdjust
2015-08-01 22:02:00 798
原创 《写给大忙人看的java SE8》笔记 -- 2. Stream
stream简介stream是一个java.util.stream.Stream对象。各种集合类都添加了创建stream的方法,如list.stream(), list.parallelStream()。Stream接口也包含了各种创建stream的静态方法。wordlist.stream().filter(w -> w.length() > 10).count();stream的特点
2015-07-30 22:46:32 1078
原创 《写给大忙人看的java SE8》笔记 -- 1. lambda表达式
函数式接口只含有一个抽象方法的接口,称为函数式接口。lambda表达式可以赋值并且仅可以赋值给函数式接口的变量。实际上编译器往往需要根据函数式接口推断lambda表达式的参数类型和返回值,比如:Comparator comp = (first, second) -> Integer.compare(first.length(), second.length())。实际上,你甚至无法将一个lam
2015-07-29 22:04:00 1357
原创 hadoop groupingComparator 与 secondary sort
《hadoop权威指南》里的例子:有许多气象记录,需要找出每年的最高温度,通过secondary sort实现。(这个任务其实简单的map-reduce就可以完成,这里只是为了演示secondary sort)map-reduce的shuffle阶段,只会根据key进行排序,而同一个key的value是无序的,所以要把年份和温度都放在key里面。map的输出:key为year-temperat
2015-03-18 12:15:18 1311
原创 LeetCode问题选
174 Dungeon Game题目链接 解题思路:动态规划。但是从左上角开始计算是不可行的,从右下角开始却是可以的,时间复杂度O(m*n)。参考解答164 Maximum Gap题目链接解题思路:找到最小和最大值minVal,maxVal,让后将整个区间分成n-1段,记录每段的最大值和最小值。那么最大的gap至少等于区间的长度,然后只要考察区间之间的gap即可。参考解
2015-03-11 17:27:24 507
原创 题目: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 484
原创 题目:海岸线长度
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 1437
原创 算法导论习题解-第22章基本的图算法
总结深度优先搜索按照访问顺序,每个顶点标记两个序号,首次访问时的次序,以及探索完该顶点所有分支时的次序。边可以分成四种:树边,前向边,后向边(回边),横向边。(图片来自 算法概论 by dasgupta)有向无环图和拓扑排序有向图有环当且仅当DFS过程中遇到回边。 有向无环图中每一条边都指向一个finish值更小的顶点。 对于DFS,无环性、可线性化、无回边三者是等价的。...
2014-08-01 19:56:29 8101 1
原创 算法导论习题解-第15章动态规划
#a is topological sorted, a[0] is s, a[-1] is tdef longest(a): #d[i] is the longest distance from a[0] to a[i] d = [-INF]*len(a) d[0] = 0 for i in range(1, len(a)): for j in range(i
2014-06-13 16:11:37 10687 1
原创 算法导论习题4-5:芯片检测
2019.11.14更新: 修正了方法1里的一个错误,增加了方法3。习题4-5 3rd edition (4-6 2nd edition)Diogenes 教授有n个被认为是完全相同的VLSI芯片,原则上它们是可以互相测试的。教授的测试装置一次可测试二片,当该装置中放有两片芯片时,每一片就对另一片作测试并报告其好坏。一个好的芯片总能够正确的报告另一片的好坏,但一个坏的芯片的结果就是不可靠的...
2014-05-13 22:32:20 4191
原创 整数开平方
如何判断一个数是不是完全平方数?最简单的方法是通过下面的代码:isSquare(int n) { int x = (int)Math.sqrt(n); return x*x == n;}可能有人会担心,Math.sqrt是浮点运算,会不会由于精度的问题,造成x与实际值不等?比如开方应得2,但是实际得到1.9999999,取整后只得到1。这个担心是完全没有必要的。java
2009-09-04 00:03:00 1257
原创 java多线程练习
程序描述:窗口程序,有一个按钮,当按下时会随机在面板的某个位置生成一个颜色随机的方块,在三秒钟之后该方块消失。实现:用一个list来保存各个方块的位置。每次添加一个方块的时候,在一个单独的线程里等待3秒钟,然后把该方块从list里删除,在等待开始的时候和结束的时候重绘面板。需要对list进行同步。 代码:import java.awt.BorderLayout;import j
2009-04-11 17:12:00 786
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人