随笔分类 - Leetcode
摘要:最后更新 二刷。 这个题挺难的啊。。 首先找到需要翻转的位置。 有prev和temp两个node, 思路是把范围内的node放到prev和temp之间。。 这里的temp其实是翻转区间的尾端,用tail表示。 所以prev和tail这2个NODE是指着不动的。 首先找到下一个塞入他们之间的node:
阅读全文
摘要:最后更新 三刷。 某一个状态下不能赢,说明上一个状态赢了,上上个状态输了,上上上个状态赢了。。但是越往上状态越是不一定的。。 所谓的状态其实就是input的情况。 这个题更像是DFS+状态记录,只不过提前结束的情况比较早。 java public class Solution { Map map =
阅读全文
摘要:最后更新 这是几刷。 唯一值得说道的是,添加的时候可以用. s.substring(0, i) + " " + s.substring(i+1); 也可以弄成char[] array来修改。 第二种快。 java public class Solution { public List generat
阅读全文
摘要:刷 Aug 01 2019 居然都4刷了,除了记得我做过之外完全没印象。 居然做出来了。。 对于n来说,我可以选1~n里任意一个,比如我选了3,对方一定会说答案在 [1~2]或者[4~n]中较大的那边,所以还是个MinMax题,总算稍微了有了点MinMax的感觉。 但是1~n选哪个要遍历才行。。 d
阅读全文
摘要:刷 July 29 2019 以i j为当前位置,它为右下角组成的最大的正方形是,如果上左斜上3个位置都是1,那么它的最大长度取决于刚才3个点里面最小的+它自己的1. 就是这个DP规则,不是很难。 理论上说这种二维的DP,只需要2行或者2列作为DP保存上一轮的值就行,就是滚动。 OLD 用DP. T
阅读全文
摘要:最后更新 二刷? 和小机器人走路径差不多= = 这个可以在原有的盘子上更新= = 如果不是只读。 Time : O(N) + O(M) + O(M N) Space: in place java public class Solution { public int minPathSum(int[][
阅读全文
摘要:最后更新 四刷? 依然是尝试用一维DP。 每次更新DP的时候相当于直接添加了2个方向的贡献值。 开始的dp[1] = 1不好理解,其实是代表每行第一个格子dp[j]来自左边的贡献值,来自上面的贡献值是他本身,我们在上一行算过,所以是dp[j] + 1。 下个格子dp[j+1]就变成了来自左边的贡献值
阅读全文
摘要:机器人走棋盘,左上到右下。 比较典型的动态规划,某个格的情况无非是从上面或者从左边来,两者相加就行。 Java public class Solution { public int uniquePaths(int m, int n) { int[][] dp = new int[m][n]; dp[
阅读全文
摘要:就是看哪个文件的绝对路径最长,不是看最深,是看最长,跟文件夹名,文件名都有关。 \n表示一波,可能存在一个文件,可能只有文件夹,但是我们需要检测. 之后的\t表示层数。 思路是如果当前层数多余已经有的层数说明是在go deeper,就继续,否则就要回到他属于的父目录,这个性质用STACK来实现再好不
阅读全文
摘要:一刷。 这个题还是挺难的= =有一点需要利用的就是数组长度和数组里面数的值域关系。 数组长度是n,那么数字只可以是1 n。 做法是手动排序,把数字放到相应位置。 超出数组范围的 n or 0,不动。 可以放到相应位置的,放之前看看是不是有重复的,有点话不动= =;没有就和那个位置的元素互换位置。 最
阅读全文
摘要:看起来像backtrack。。 实际上也就是。 有一个TEST CASE令我们必须先判断String是不是可分的,从而导致我不得不把word break I的办法拿来用,正好复习下。。 java public class Solution { public List wordBreak(String
阅读全文
摘要:二刷。 牛逼,二刷上来就是backtrack,TLE,时间应该是指数级别的。。 看一刷说的是DP,才想起来。 正好又学习巩固了一下DP。感觉DP套路太多了,每道题都不一样,至少LC上是这样的,很难说总结出什么规律。 按照CodeGanker的路子来: 1.确定可以保存的信息 2.递推式(以及如何在递
阅读全文
摘要:这个题比想象的容易,尤其是看了hints之后。 本质是要保留窗内元素的ORDER,并且删除元素时不影响ORDER。 说实话如果不看HINTS之后比较难想到,看了HINT就很容易了。 一个queue,保存index,删除从head删,添加从tail添加。 每次要保证head是最大的。 比如 6 2 1
阅读全文
摘要:刷 July 12 2019 前面123刷逼逼一大堆什么乱七八糟的。。 暴力O(nn) 正确的做法是backtrack. 回文判断从中间判断比较划算,因为一旦失败,就没有继续往外判断的意义了,可以back track。 所以就遍历,从遍历的位置为中心往两边判断。 需要注意,ABA ABBA这俩都算回
阅读全文
摘要:最长连续区间,如果可以SORT就太容易了。 SORT的目的是把连续的放到一起,便于我们遍历,我们可以手动完成这个过程。。 用MAP,先全都加进去,然后遍历原数组,往大小2个方向找,比较长度,找到了要REMOVE到,要不以后重复寻找了。 做了一般突然感觉不需要MAP,SET就可以,因为KEY和VALU
阅读全文
摘要:经过昨天的消沉 今天我振作了 设计个数据结构,添加,删除,随机获取都是O(1). 怎么会有这么牛逼的数据结构,所以肯定相应的要耗费空间。 添加和获取耗时O(1)是Array的特性,或者说是Map/Table的特性,思考下php的array就明白其实是index的mapping了。 Random要求O
阅读全文
摘要:刷 June 21 2019 最早的时候被边界条件各种恶心。 YLNR大法,注意最后的边界。 java public int[] searchRange(int[] nums, int target) { if (nums == null || nums.length == 0 || nums[0]
阅读全文
摘要:刷 June 22 2019 二分,通过单调性来判断该舍弃哪一半。 需要注意的就是edge case,其实l + 1 nums[r] ? l : r; } ```
阅读全文
摘要:这个和 I 、II 比不是一个级别的。。 I找数组里有没有重复的,用HashSet判定就行。 II是有没有重复,然后重复俩元素距离小于K。 用HashTable,KEY是元素,VALUE是坐标,遍历数组遇到存在于TABLE中的元素,返还那个元素的坐标,和当前比较,如果小于K,就TRUE;否则用当前元
阅读全文
摘要:刷 June 27 2019 比较难= = 用indegree的思路来做的,或者说拓扑的思路topological sort prevStr和tempStr,说明prevStr里的char在tempStr里的char之前. eg: abc&abd = d c 说明D前面有一个C 要给所有出现的cha
阅读全文

浙公网安备 33010602011771号