随笔分类 - Leetcode
摘要:这题居然没记过。 刷 June 12 2019 wiggle sort I 比较直观就是一大一小 然后看亩地有人说G家的面试题是A数组给单调性,B数组根据A的来调。 A = [1,1,1,1][0,0,0][1,1][0,0,0] 给个数组,1代表递增,0代表递减,B数组来根据A的递增递减排列。 B
阅读全文
摘要:跳 June 4 2019 蓄水池,双指针的应用。复习一下就是每次只能选一个指针来单向运动。这个题我居然没记录过。 这里个题需要同时维护左右两边的木板高度,通过木板高度来判断移动哪边的指针,移动较短的那边。移动的双指针干3件事: 看有没有更高的木板,有就记下来 看能不能以较小的木板为边界蓄水(上面那
阅读全文
摘要:最后更新 三刷 16 Jan 2017 数学题= = 加一点点动态规划。 dp[n]表示 N能分成的最小数量。。 然后无非就是看一个数怎么分= =拿12来说: 9+3 1 + dp[3] ... 4+8 1 + dp[8] ... 1+11 1 + dp[11] 看哪个最少就是哪个分完就保存一下,以
阅读全文
摘要:最后更新 一刷 16 Jan 2017 这个题我甚至不知道该怎么总结。 难就难在从这个题抽象出一种解法,看了别人的答案和思路= =然而没有归类总结到某种类型,这题相当于背了个题。。。 简单的说,除了最外面的4个点,所有的点都会2次2次的出现,如果有覆盖,覆盖进去的点就不是成对出现了。 最外面4个点围
阅读全文
摘要:最后更新 三刷 15 Jan 2017 好熟悉的题了,DFS做,注意比如1 3是经过2的,如果2被访问过,那么1 3也是可以的。 java public class Solution { public int numberOfPatterns(int m, int n) { int[][] path
阅读全文
摘要:最后更新 二刷 15 Jan 2017 翻船了= = 还是要仔细点。 Time: O(n) Space: O(1) java public class Solution { public boolean isStrobogrammatic(String num) { int l = 0; int r
阅读全文
摘要:最后更新 二刷 15 Jan 2017 用右起第二位来表示更新结果,这样最右位依然可以用来判断。 最后再遍历一次全部更新就行了。 做得好傻逼,应该可以用1 0 1 0 1这样滚动来做。 Time: O(MN) Space: O(1) java public class Solution { publ
阅读全文
摘要:跳 本来懒得记录= =但是找工作前的代码真是丢人。。。 这应该是UF最好的应用之一了。 二维转一维建UF 需要注意 x col + y 算完结果的i再传到union或者find里比find(x, y)这样进去再算好多了。。我是不是傻逼啊 UNION的标准是题的关键, 上下左右相邻。不用UF做的话牵扯
阅读全文
摘要:最后更新 三刷 13 Jan 2017 用“”表示出现过的单词,这样最后判断的时候就知道是不是唯一,还是压根不存在。。 java public class ValidWordAbbr { Map map; public ValidWordAbbr(String[] dictionary) { map
阅读全文
摘要:刷 July 15 2019 这个题蛮有意思的,有2种做法。 第一种是encode的时候escape character。 比如用 来区分不同String,遇到String里有 怎么办,加个别的符号%在前面。 String里有%怎么办,再加个%%在前面。 最后的结果就是, 单独出现的话,说明是新的S
阅读全文
摘要:最后更新 三刷 13 Jan 2017 楞做法,这次尝试写的好看点。 结果写成了一坨。 java public class Solution { public boolean validUtf8(int[] data) { if (data.length == 0) return true; int
阅读全文
摘要:刷 2019 July 08 和296的区别就是,有了障碍的存在,导致没法简单地纵向横向算距离= = 然后从每个点开始BFS,难点在于: 为了不走回头路,从一个点开始BFS的时候得标记走过的格子,需要一个新的boolean[m][n]的来标记,然后这个点走完需要reset 需要另一个int[m][n
阅读全文
摘要:最后更新 二刷 12 Jan 2017 正规做应该是以每个empty room做BFS,最坏的情况是整个地图里全是room。。 值得思考的一个做法是,以每个gate做搜索= = BFS的话,先搜到的房间肯定是最短距离。 DFS的话,要配合backtrack,按理说BFS快,但是实际结果是DFS简单得
阅读全文
摘要:最后更新 二刷 12 Jan 2017 M难度的。。 如果用BFS来做,就变成H难度的了。 首先统计每行有几个人,每列有几个人。 然后看哪一行使得纵向距离最短,哪一列使得横向距离最短就行了。。 Time: O(mn) Space: O(m + n) java public class Solutio
阅读全文
摘要:刷 July 17 2019 一开始用Stack做的,来回倒腾: 不是右括号进栈 右括号的话就开始POP找左括号,找到就有了需要重复的String,然后看重复几次,重复完了司塞回去继续。 有很多edge case忽略了,比如digit大于10;经常要reverse之类的 看以前自己写的答案,可以不用
阅读全文
摘要:最后更新 二刷 11 Jan 2017 第一种方式是各种pointer标记轮到哪个LIST,在那个LIST是什么index,比较繁琐。 第二种方式是用Queue ,每次拿出最前面的list,拿出里面的element,然后如果此时list不是空的,从屁眼塞回原来的Queue里。 Time Comple
阅读全文
摘要:最后更新 三刷。 11 Jan 2017 简单的二叉树,没啥技巧可言,DFS.. Time: O(n) Space: O(depth) 好像就是楞做,记录长度就行了。 判断失败就从0开始。。 iterative比较难啊。。貌似得记录每一个NODE的当时情况,就得有个MAP之类的了。。 先不考虑了 二
阅读全文
摘要:最后更新 一刷 11 Jan 2017 这个题是Ez难度的吧。。。 注意edge cases就行。 熟悉下Character的方程: Character.isDigit(c); Character.isAlphabetic(c); 另外String.toUpperCase()就可以,没必要每一个ch
阅读全文
摘要:最后更新 二刷 11 Jan 2017 首先,正常做的话,是每个格子都纵向横向CHECK一下,这样复杂度爆炸。。 看起来是用dp[][]记录情况,避免重复计算。但是这样的话,得有2个dp[][],分别记录某一个格子可在横向和纵向分别干死多少敌人。 空间复杂度又爆炸。。O(2MN) 不过可以优化。 遍
阅读全文
摘要:最后更新 三刷。 10 Jan 2017 这个题印象挺深的,当时连PQ自定义comparator都不会。 最直接的就是把所有组合都加到PQ里,然后POP出K个。 稍微好点的是选其中一个numsA里最小的和另一个numsB里所有的数组合,加进PQ, 保证PQ里只有K个。 第一个Pop出的肯定是最小的P
阅读全文

浙公网安备 33010602011771号