- 博客(17)
- 资源 (1)
- 收藏
- 关注
原创 用并查集解 kick start的Wiggle Walk
kick start c轮第一题Wiggle Walk,受此处的启发,发现用可4个并查集来解,注意两点:1,我是用map而非数组来实现并查集的,因为担心上次内存溢出的问题重现;2,普通并查集不强调根的位置,此处不相同,根的位置代表了此段的极限,合并时应注意。ac的代码在Attempt 36 Jul 28 2019, 01:09 private Point findRoot(Map<P...
2019-07-28 01:43:31 248
原创 未解之题
kickstart B轮第二题Energy Stones,这里提供了java解法。此题用01背包来解,难点在于普通的背包,各个item加入的顺序是无所谓的,但此题的item(具体来说就是stone)不一样,有关系。关键是为什么要按this.seconds * other.reduce降序排列,没搞明白。再举个例子,c轮第三题Catch Some也是用背包来解。也是两维dp还不够,因为有个特殊的i...
2019-07-27 20:19:31 113
原创 竖向使用单调栈+横向使用单调队列,完美解决kick start c轮 Circuit Board
google的题果然都不是吃素的,值得细品啊,都是leetcode上的hard题变形+组合,如此题:Circuit Board,先从相对简单的set 1开始解, 按照官方解析中的“we first define Pi,j as the maximum number of contigious cells on the right of the cell i, j . We immediately...
2019-07-26 22:35:52 129
原创 求两侧最近的更小点,用单调栈解Largest Rectangle in Histogram和trapping-rain-water
参考了两种解法,最后用以中间的某点为高度,快速分别求左右边最近的比它高的点为整体思路,以最大栈为实现方式,实现了: public int largestRectangleArea(int[] heights) { int max = 0; Stack<Integer> maxst = new Stack<Integer>() { //简化版最大栈,直观表现为单调不...
2019-07-25 18:48:57 141
原创 由google kicstart 引出的堆溢出问题
kickstart c轮第一题Wiggle Walk看起来很简单,没想到却暗藏了内存溢出的坑。我很快实现,并发现怎么样都是RE,又不知道到底是什么错误,怀疑了各种比如数组索引溢出,甚至输入输出等,找了好久找不出来,烦死个人。最后为了测试极限情况boolean[][] visit = new boolean[R+1][C+1]; 改成了 boolean[][] visit = new boolean...
2019-07-24 21:26:16 111
原创 3sum 及TreeMap的线性遍历
此题我的思路是,先形成一个 num与其频率的 treeMap, 然后每次选定一个左边的num,这样其他两数必在此key的右边,而且其和也被决定了,可用左右两指针互相逼近的方法获得。遍历左边num的时间为O(n), 找右边两数也是O(n),所以时间复杂为O(n)。应该说这已经是优化过的算法了,然后在实现中[https://leetcode.com/submissions/detail/2456...
2019-07-24 01:42:30 186
原创 安装astview记
astview是一个eclipse的插件,可用于显示选定的java文件的ast.以前应该是用Install-Available Software的在线安装方式过。今天换了一个eclipse,想用同样方式却不知怎么不行了。后来按照https://www.eclipse.org/jdt/ui/astview/ 中的Manual方式,直接将org.eclipse.jdt.astview_1.1.9.2...
2019-07-23 12:19:35 701
原创 求幂算法及其背后的离散数学
参考:http://ju.outofmemory.cn/entry/158553此文由快速求幂算法讲起,讲到了其中的半群等离散数学的概念。并由此仿造出了其他api. 文章中提到“如果想学习这个算法的一些用法或者想知道更多这个算法背后的理论,请查阅这本叫做《Elements of Porgramming》,这本书中文名字叫做编程原本”。我有些兴趣,但是考虑到目前时间紧,暂时不看,先存在这里...
2019-07-22 17:00:11 474
原创 银联比赛之码队弟弟求和
官方给出的解答为:此题有三大关键点:1,我称之为求余的分配律,详见https://www.geeksforgeeks.org/modulo-1097-1000000007/( a + b) % c = ( ( a % c ) + ( b % c ) ) % c( a * b) % c = ( ( a % c ) * ( b % c ) ) % c( a – b) % c = ( (...
2019-07-22 00:09:39 201
原创 运用排列组合直接解62. Unique Paths
题目:https://leetcode.com/problems/unique-paths/典型思路是用dp来解,时间,空间均为O(n): public int uniquePaths(int m, int n) { int[] ans = new int[n]; Arrays.fill(ans,1); for(int i=1;i<m...
2019-07-20 02:40:57 143
原创 别拿数组作为HashMap的KEY
数组作为key,只是数组的地址引用的hashcode,Arrays.hashcode静态方法倒是能够根据数组的内容创建相应的hashcode,问题是hashmap用数组做key时用的是前者的hashcode。所以应避免使用数组为键。如果一定要用数组来作为map的key值的话,我想到两种方法:1,将数组,先转化为string2,用list代替...
2019-07-20 01:38:36 4600
原创 Java中的装箱和拆箱,以及由自动拆箱引起的一次NPE
转自https://www.cnblogs.com/dolphin0520/p/3780005.html关键的话:当 "=="运算符的两个操作数都是 包装器类型的引用,则是比较指向的是否是同一个对象,而如果其中有一个操作数是表达式(即包含算术运算)则比较的是数值(即会触发自动拆箱的过程)。...
2019-07-19 20:33:06 222
原创 最小\大栈以及最小\大队列 单调队列
此题也可用单调队列来解:https://leetcode.com/submissions/detail/248883712/ 理由是最终队列中包括的所有元素,都是从它的左边元素(exlusive)到它这一段中,用时最长的 (官方提供的默认解法时间复杂度与我相同)。当然此处的单调队列与上面的略有不同,在于。但是后面我发现了一种更简练而且效率更高的方法:单调队列(我自己的命名,可以平均线性时间得到最大\小值)。结合最小\大栈的思路,和两个栈构成一个队列的思路完成。可在常数时间内得到栈的最值。
2019-07-19 01:36:46 255
原创 Convert Sorted List to Balanced Binary Search Tree 二叉树遍历中的自底向上
一般二叉树遍历都是自顶向下的,这样自然。但是也有用到自底向上的时候,如下例:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/discuss/?currentPage=1&orderBy=hot&query=可观察到我的第一次ac和第二次ac,代码结构相同,关键区别在于第二次用到了自底...
2019-07-16 23:47:40 184
原创 基数排序
https://leetcode.com/problems/maximum-gap/用java实现了一下,采用LSD(最低位优先法):(未考虑有负数的情况) private static void radixSort(int[] nums) { int max = nums[0]; for (int i = 1; i < nums.length; ...
2019-07-07 02:48:02 91
原创 如何对map的entry进行排序
参考https://leetcode.com/problems/sort-characters-by-frequency/import java.util.Comparator;import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Set;import java...
2019-07-07 00:31:09 1531
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人