09 2016 档案
摘要:主要就是后FOLLOW UP,如何在不知道总数的情况下,随机选取。 用的是沼气池理论,貌似是统计那块的。 这行的意思是,还是遍历,但是对于某个节点,被选到的几率是1/x,比如第四个,被选中的概率是1/4,但是我们此时不停止遍历,继续遍历,如果以后选中别的,刚才被选中的第四个会被覆盖,所以为了保证第4
阅读全文
摘要:一开始没看见shuffle...觉得同时遍历不就完事了。。 和那个所有数字出现2,有一个出现3次还是什么的一样,CHAR可以完美和INT相互切换。 Java public class Solution { public char findTheDifference(String s, String
阅读全文
摘要:最后更新 二刷 15 Jan 2016 排座问题,记得以前是H难度的,现在改成M了。。 总结一句话,先按身高排,高的在前面;身高一样的情况下,K小的在前面。 BB半天说白了一句话,H大的在顶端,H一样的K小的在顶端。 根据这句话设立PQ的判断规则就行了。。 这样排的原因是因为出QUEUE的时候,后出
阅读全文
摘要:。。感觉做的很蠢。 主要就是看负数怎么处理。 举个例子,比如8位: 0111 1111 = 127 1111 1111 = 1 1000 0000 = 128 正常情况1111 1111应该是256,就是最大值127+最小值的绝对值128+1+num 其实点开那个提供的WIKI链接就一目了然了。。
阅读全文
摘要:题目其实指的是left non inner node。。 然后就没啥了,BFS DFS应该都可以。。BFS可能麻烦点。 DFS就是遍历前判定下,满足条件的恰好不需要继续go further from that one。。
阅读全文
摘要:这个EASY难度的题怎么感觉比H的还难,昨天没做出来,今天才做出来。。 呃啊。。我生 气 啦。。 直接看的答案,耻辱。 1 digit: 1~9 总共1×9个 2 digits: 10~99 总共2×90个 3 digits: 100~999 总共3×900个 .. ..... 所以就是先定位大区间
阅读全文
摘要:图不是很全面,应该自己画个例子。。 好像做过一个类似的。 一开始卡在不知道怎么处理一个凹槽之后,假如当前凹槽最右可以和曾经的最高携手共度青春,如何成全。 看了答案发现明明STACK已经记录了当前最高,自己真是蠢。 当下一个比堆顶高的时候,POP一个出来作为初始。 开始POP,一直POP到堆顶比当前高
阅读全文
摘要:刷 June 22 2019 第一反应是这个题也配? 结果做了做还真配。 判断TARGET落点的时候,如果mid right,那么是 5 6 7 8 1 2 在右边 剩下的情况是 left nums[r]) { l = m; } else { r ; } } return Math.min(nums
阅读全文
摘要:用String表示BinaryTree,然后在通过String还原刚才的BinaryTree. 其实我感觉LeetCode一直用的一层一层的表达方式就挺好的,通过BFS实现的。 这里如果是DFS的话,那么就pre/in/post选一种,应该都可以。 有2个需要记录,1个是每个NODE的值,1个是结构
阅读全文
摘要:recursive比较简单。。 Iterative: 在纸上写出顺序,然后想用STACK来做,结果发现放入STACK的顺序就是preOrder traversal先遍历right child再left child的顺序。 所以按preOrder来做,只不过先遍历右边再遍历左边,然后因为是倒过来的,最
阅读全文
摘要:刷 June 20 2019 以前做的有问题,感觉遇到重复的会错,但是parameter变了,不好测了= = 这个题还是值得记一下的。其实是插入多个[1,1]这种interval。无非是跟前后判断就那么几种情况: 左右相连,那一起MREGE,然后删掉后面的 只和一边连, 都不连 其中一边囊括, 更重
阅读全文
摘要:刷 June 19 2019 按startTime排序之后楞做= = java class Solution { public int[][] merge(int[][] intervals) { if (intervals.length () { public int compare(int[]
阅读全文
摘要:刷 June 19 2019 主要思路是,merge all intervals that have overlap with being inserted interval Edge case比较麻烦。 有可能合并完没有剩下的了,要插入的变成了最后一个,没插入,所以最后要多插入一下 有可能合并完还
阅读全文
摘要:这个题与那个LIST套环的其实是一回事。 把nums[]想象成C里面的array of pointers,元素就是指向位置,INDEX就是他的位置。 之所以可以这样想象,是因为题里说了1 n+1个元素出现在size为n的ARRAY里。 一开始想的是1个pointer遍历就行,从nums[0]开始,记
阅读全文
摘要:= =这个题好像跟另一个N QUEEN一样的。。 我还以为distinct要转棋盘呢。。比如某种解旋转期盼180°和另一种一样,就要去掉。。结果发现根本不是,就是算总数,比上一个少了个构建LIST的步骤。 Java public class Solution { int res = 0; publi
阅读全文
摘要:有名的N QUEEN问题,上学的时候作为例题来讲back track。 对于这种问题,我有一个独特的小窍门,我称之为楞算法,或者生算法。英文叫做brute force..... 这个题就是backtrack,而且backtrack的情况只有一个,就是俩皇后争风吃醋,要弄死对方。每放置一个皇后,都要看
阅读全文
摘要:没啥难的,难点在于各种带空格的edge cases. 然后 按空格分是 str.split("\\s+"); 二刷。 感觉这个题是E难度的。。可能本意是考C,C++这种指针运算,in place的话还有那么点意思。 对于Java来说比较直接,用split去掉空格顺便变成String[],然后倒着遍历
阅读全文
摘要:用加减法模拟除法。 除法本质就是 被除数 商个除数相加 = 0 如果你电脑足够好,可以无限减。。但是这个题肯定不是这么简单。 最快的方法还是 减去 商乘以除数。 但是这里不能使用乘法,那只好用BIT的运算来实现了。 自己没做出来,但是发现一刷做出来了,怎么看都不像是我这个智商能写出来的,所以不知道当
阅读全文
摘要:这个题好贱,二刷的时候就有一刷的印象,记得改来改去各种CASE。 果不其然。 除法就不说了,主要就是出现无限循环的时候,如何判定哪些是循环的。 我们有的信息就是 被除数 除数 商 余数 通过商来判断开始无限循环是不显示的,结果可能是0.1111111111111111111,商一直是1。 通过除数来
阅读全文
摘要:正规解法直接跳到代码上面一点的部分就可以了。但我想记录下自己的思考和尝试过程,希望二刷能看到问题所在。 找规律的时候写了好多,虽然规律很简单。 只要随便写3以上的例子,就应该发现,相邻的2个最后结果是一样的,n=8和n=9的结果都是6,n=10和n=11的结果都是8.. 当时我的想法是,8 9消除2
阅读全文
摘要:总觉得有陷阱,小心翼翼地做完发现是E难度的。。 正统做法就backtrack,注意break case.. 一开始我觉得明显可以列举出所有可能,反正一天就12 60,这才多少。。 backtrack Java public class Solution { public List readBinar
阅读全文
摘要:做完了终于可以吃饭了,万岁~ 假设从stone[i] 无法 跳到stone[i+1]: 可能是,他们之间的距离超过了stone[i]所能跳的最远距离,0 1 3 7, 从3怎么都调不到7; 也可能是,他们之间的距离小于stone[i]能跳的最近距离,0 1 3 6 10 11,从10无法挑到11;
阅读全文
摘要:(English version is after the code part) 这个题做起来比看起来容易,然后我也没仔细想,先速度刷完,以后再看有没有改进。 用这个来说: 1 2 4 3 2 2 1 9 去掉1位的话,应该去掉4,得到 1 2 3 2 2 1 9 去掉2位的话,在刚才的基础上,去掉
阅读全文
摘要:被自己蠢哭了。 visit[i][j] = true写成了visit[j][j] = true 我DEBUG了1个多小时。。。。。。。 从最外面那圈的所有O开始顺着相邻的O走,里面那些能走到的O就是不用变成反革命分子的。否则最后变成X,反革命分子。 主要是剪枝,乱七八糟一大堆情况,包括但不限于: 走
阅读全文
摘要:DP[0]DP[1]几乎花了2/3的时间来考虑各种CASE,还是没考虑全,这个题思路不难,但是做对很难。。。 dp[i] 就是 0 i的所有可能性。 对于s.charAt(i)来说: 要么他自己作为一个数字,可以是1 9,此时dp[i]和dp[i 1]一样。是0的话就不行。。 要么他和前一位组成两位
阅读全文
摘要:这个题还有印象。 其实是个图像题,每个Sring是个vertex,有edge到另一个vertex说明可以转化,当然要自己构建。 构建之后做一个BFS找最短路径。 BFS就一个套路,问题就在于如何判断俩单词是否可以转化。 一刷的时候我记得是看了code ganker的一个巧妙的方法。这次尝试用自己的办
阅读全文
摘要:刷 June 20 2019 多了个wildcard,无非是wildcard的时候下一层所有的NODE遍历一下。这个时候需要传下去substring和下层的node,所以多建了个search(string, node) 秒之
阅读全文
摘要:一开始知道是PQ之类的,然后在怎么比较上难住了。。(怎么写PQ里的compare()) 一位一位比较是可以的,但是特殊情况很难处理,比如如何比较121 12,和128 12. 然后看答案发现一刷用的办法是组合成AB或者BA比较,年轻时的我真是太机智了。。 最后就是0的处理,要处理leading 0s
阅读全文
摘要:一开始in order traverse 然后加入到STACK里,最后一个一个POP STACK里的元素,POP出就和堆顶比较,不大于就说明不符合规定。 AC了,不过7MS。问题在于必须遍历一次,然后再重新遍历STACK,可能提前结束判断。 需要一个在遍历时一旦发现不符合规定直接停止的办法。 其实还
阅读全文
摘要:和上一题没啥区别,只不过要记录顺序。 一开始Queue里的是out degree是0 的,从哪个开始都一样,也可以一下子都拿出来。 以后每找到一个,就加到RES里,最后看情况返还就行了。。 Java public class Solution { public int[] findOrder(int
阅读全文
摘要:这个题有俩EDGE CASE不容易想到。 一个是没有路径是返还“/"不是"" 另一个是有可能出现a//b这种情况,split会分出一个空字符串 然后就是EASY难度的了。。 Java public class Solution { public String simplifyPath(String
阅读全文
摘要:比较典型的动态规划。一刷的时候看code_ganker做法,对他局部 全局的想法很震惊,五体投地。 让乘积最大有2种来源: 2个正数相乘,越来越大。 2个负数相乘,也可以变大。 所以最终结果可能是正数乘以正数,也可能是一个非常小的负数乘以另一个负数,然后一下子牛逼了。。 所以既需要保留最大的正数,也
阅读全文
摘要:很无聊的一个数学题。 需要知道2个公式 计算幂函数的。。 主要问题就是指数太大,a^b中的b太大。。 要分解。 23^1335 = { (23^1330)%mod (23^5)%mod} % mod 然后一开始的 (23^1330)%mod = ((23 ^133)%mod)^10 原式就是 ((2
阅读全文
摘要:需要知道以下几点: XOR 返还不一样,不一样的相加那么结果是1。 AND 返还进位,进位之后肯定是0. 相当于原题变为A+B之后,算2部分,第一部分是相加之后没进位的那些bits,都是1,第二部分是进位的那些bits. 两部分相加就行了。 用迭代,停止的情况是第二部分是0。。 public int
阅读全文
摘要:这个题的思路是动态规划,DP[n]代表能组成n的组合数。算1 n就可以,因为都是正数。 算dp[n]的时候遍历num[1] to num[n] index = i 如果i = nums[m]) dp[n] = dp[n] + dp[n nums[m]]; } } return dp[target];
阅读全文
摘要:这个傻屌题,二刷思路一下子就找到了,问题是edge case多的一逼,其实难就难在如何处理相等的2个元素。比如记录相等前的正负判断,这个还好说。 一上来就相等怎么办,必须解决这种情况,反正和麻烦。。 Java public class Solution { public int wiggleMaxL
阅读全文
摘要:遍历原数组,当前I,然后随机nextInt(length i),两个SWAP,就表示随便选了一个放到I了,然后再看I+1,I+2。。到最后就行了。 int[] origin; int[] res; Random rdm = new Random(); public Solution(int[] nu
阅读全文
摘要:用DFS来做,先弄开头是1的,再弄开头是1的里面开头是1的,再开头是1的里面开头是1的里的开头是1的,再。。。 是吧…… 比N大了BREAK就行。 注意第一个循环是1 9,往后的循环是0 9。
阅读全文
摘要:用int array记录可用字母数量 0的时候说明GG了 public boolean canConstruct(String ransomNote, String magazine) { if(ransomNote.length() magazine.length()) return false;
阅读全文
摘要:括号题一般都是stack.. 一开始想的是存入STACK的是SRING,然后POP出括号在构建新的NestedInteger放到另一个里面,但是操作起来费时费力。 后来猛然发现其实可以直接吧NestedInteger作为Object放入Stack里。 这种直接往堆顶元素里放的办法一定要注意。 然后就
阅读全文
摘要:一开始觉得是不是有什么巧办法,就先BRUTE FORCE。 发现似乎没什么巧办法。 思路是用2个pointers一个标记短string位置,另一个是长string。 找到就p1++,p2++ 找不到就p2++ 然后用indexOf,似乎快很多。 (https://discuss.leetcode.c
阅读全文
摘要:看起来很难的样子,隐约觉得要动态规划。 先用笨办法,基本就是枚举。。果然TLE。 Java public class Solution { int res = 0; public int longestSubstring(String s, int k) { int[] map = new int[
阅读全文
摘要:搜词,一个字母只能用一遍。 比较简单,无非是看4个方向…… public boolean exist(char[][] board, String word) { if (board == null) return false; int row = board.length; int col = b
阅读全文
摘要:二刷尝试了别的办法,用MAP代表关注列表。 然后不初始化,但是只要有用户被使用,而他又不在MAP里,就把他加进去,然后让他关注自己。。 但是这样做超时了。 问题在于这个题解法太多,有很多不同的情况。 STACK记录所有推,然后找10个,那太难了,可能某个用户关注的只是几亿里面的某些人,搜索起来很要命
阅读全文
摘要:[ [ 1, 2, 3 ], [ 4, 5, 6 ], [ 7, 8, 9 ] ] 一刷我记得用的是12 36 98 74 这种方式,然后往里一层。 遇到长宽是1(比如刚才第二层就剩1个5了)和2([1,2],[3,4])的就只遍历,不往里。但是很麻烦,二刷换了个方法。。 Java public c
阅读全文
摘要:先找中点.. 1 2 3 4 5 6 7 8 后半部分反转.. 1 2 3 4 8 7 6 5 分别链接。。 1 8 2 7 3 6 4 5 这种题思路不难,但是操作起来比较繁琐,每次做完一堆变量。 想不用这么多变量,就要用P1 P2这种名字上毫无意义的指针。。否则会误导善良,天真,无暇,无辜的群众
阅读全文
摘要:这个题真是做得我想打人了。我生起气来连自己都打。 一开始quick select没啥可说的。但是in place把老命拼了都没想出来。。 看网上的答案是3 partition,MAP式子一看就由衷地反胃。。 老子不管了,就O(n)。。
阅读全文
摘要:莫名奇妙找了个奇怪的规律。 每次用大的减小的,然后差值和小的再减,减减减减减减到差值=0为止。(较小的数 和 差值 相等为止,这么说更确切) 然后看能不能整除就行了。 有些特殊情况。 看答案是用GCD做的,2行就写出来了,但是不是很理解。 Ax + By = z,A B为正负 int,就是有接。。神
阅读全文
摘要:刷 July 15 2019 乘法,不同的是,不能一位一位的算了,比如: M位乘以N位,结果最多是M + N位,所以定义个int[M + N]记录中间解 java public String multiply(String num1, String num2) { int[] res = new i
阅读全文
摘要:就是先加,加到其中一个是NULL 都是NULL 就看进不进位,进位就加1 返还RES.NEXT 其中一个不是的话 找到不是的那个 再加,最后再看进不进位 主要就是加完之后有2次进位要注意 逻辑上不难 琐碎太多 二刷。 感觉没什么巧办法,就是楞做,楞做也不难。 要点有2个: 处理进位 处理NULL 三
阅读全文
摘要:跟符号还有运算顺序有关的基本就是STACK来做。 里面类型Sring或者Integer都可以,但是免不了来回转换。 Java public class Solution { public int evalRPN(String[] tokens) { if(tokens.length == 0) re
阅读全文
摘要:刷 July 03 2019 这个题比较诡异。题里说的unique是指任何VAL是1的点其实都是指向1个。 做法是先走一遍,记录所有的已经存在的node: Node[100]。 复制一遍记录的所有Node,此时复制的只有里面的val,复制出的copyNode的neighbor还没做好,也就是说复制出
阅读全文
摘要:刷 June 20 2019 白给的。 时间复杂度都和str的长度有关。这个结构其实就是空间换时间 Node[26] 来做也行. nextLevel[tempChar 'a'] = new Node()这样
阅读全文
摘要:动态规划里例题,硬币问题。 p[i] = dp[i coin[j]] + 1; 注意i
阅读全文
摘要:随机返还target值的坐标(如果存在多个target). 不太明白为什么这个题是M难度的。 无非是要么弄TABLE之类的,开始麻烦点,但是pick的时候直接PICK出来就行了。 要么开始简单点,都存了,选的时候再随机选。 前者各种溢出。。貌似memory在leetcode比较值钱。。就用后者 Ja
阅读全文
摘要:找到排列组合的第K个 一开始用backtrack,成功组合到第K个的时候返还。 果然TLE。。 然后看规律。 比如N = 4 1 2 3 4 2 1 3 4 3 1 2 4 4 1 2 3 就是4个 N=3的排列组合 同理 3 就是 3 个 N = 2的组合 二刷。 回头看自己一刷,觉得自己好牛逼。
阅读全文
摘要:呃,楞做应该不行即使知道 (long)x) R = (int)M 1; else L = (int)M + 1; } if(L L == x) return L; else return L 1; } } 注意二分用的是Yes Left No Right。 找到就是Left,找不到就是返还的靠右边的
阅读全文
摘要:nlogn对于LIST来说只能是merge sort了。 quick sort没法倒退,不适用于singly list。 length = 3,找到中间,前后分别排序,再merge,其实就是典型的merge sort + node management. Java public class Solu
阅读全文
摘要:先正统做法。 结果TLE 考虑下别的做法。 不管是/2 +1 1都是1 bit操作,从bit上入手。 8 = 1 0 0 0 需要右移3次。 9 = 1 0 0 1 1 /2 /2 /2 基本思路是; 如果是偶数,最右位(RMB)是0,直接/2; 如果是奇数,通过+ 去掉RMB的1. 但是+ 还是有
阅读全文
摘要:一开始没察觉到0123 3012 2301 而不是 0123 1230 2301 的原因,所以也没找到规律,一怒之下brute force.. Java public int maxRotateFunction(int[] A) { if(A.length == 0) return 0; int r
阅读全文
摘要:图像题,没觉得有什么简单的办法,貌似可以用Union Find来解。 感觉有2种思路,一种是先全部构建好每2个点的weight,然后直接遍历queires[][]来抓取答案。 一种是只构建简单的关系图,然后通过DFS来一一找寻要求的答案。 做了一会好他妈的麻烦,最后参考了(http://blog.c
阅读全文

浙公网安备 33010602011771号