摘要: Maximum Size Subarray Sum Equals k 要点: 为什么slinding window或者local ending at方法不行?要得到exact equals k,而array不是sorted。 idea:基本利用了partial sum差得到subarray sum。 阅读全文
posted @ 2016-07-12 20:21 absolute100 阅读(94) 评论(0) 推荐(0) 编辑
摘要: Largest BST Subtree 要点: http://articles.leetcode.com/largest binary search tree bst in 这题重点是理解题意,还有道类似题 Largest Binary Search Tree (BST) in a Binary T 阅读全文
posted @ 2016-07-12 20:20 absolute100 阅读(115) 评论(0) 推荐(0) 编辑
摘要: Number of Connected Components in an Undirected Graph 要点: union find如何记? data structure就一个array/list,每个元素初始化为val=index,表示每个元素是独立的。之后还保持的元素一定是union后的根。 阅读全文
posted @ 2016-07-12 20:19 absolute100 阅读(131) 评论(0) 推荐(0) 编辑
摘要: Design Tic Tac Toe 要点:这题和design题接近,重点是如何表示,从而便于计算game状态。巧妙的方法是只用list[i]表示某行/列,两个players分别从+/ 两个方向累加,哪个位置累加到n/ n则代表哪个player胜出。当然还有对角线/反对角线的情况 和8 queen, 阅读全文
posted @ 2016-07-11 20:27 absolute100 阅读(144) 评论(0) 推荐(0) 编辑
摘要: Moving Average from Data Stream https://repl.it/CarT 阅读全文
posted @ 2016-07-11 20:26 absolute100 阅读(105) 评论(0) 推荐(0) 编辑
摘要: Reverse Vowels of a String 要点:记题,这题的是对换前后对应的Vowel字符。注意python string是immutable的,所以必然要额外O(n) space。2 line code的基本思路: 一行反向generate vowel,另一行根据这个顺序从正向匹配单个 阅读全文
posted @ 2016-07-11 20:25 absolute100 阅读(135) 评论(0) 推荐(0) 编辑
摘要: Rearrange String k Distance Apart 要点:这题要反向思维:如果k distance apart,那么除非最后一组,其他k组都是distinct的。greedy algorithm:显然出现次数越多,越要优先放,这样才能分布到尽可能多个streak。另外同个char最好 阅读全文
posted @ 2016-07-08 20:41 absolute100 阅读(126) 评论(0) 推荐(0) 编辑
摘要: Design Snake Game 要点: representation:给了grid,坐标放list里表示蛇身。 api和data structure更新的关系:就一个function: move(direction) 具体的data structure snake:需要随机查找碰撞检测,还要支持 阅读全文
posted @ 2016-07-08 20:40 absolute100 阅读(113) 评论(0) 推荐(0) 编辑
摘要: Line Reflection 要点: 一个confusion:找到所有点的median为什么不行?重复的点的情况,另外unsorted找median没有max/min中点容易 注意y轴对称要验证x 公式:2 x x0:x x0就是对称边的delta,所以再加个x就是所求 这题还要考虑y坐标相等:一 阅读全文
posted @ 2016-07-08 20:40 absolute100 阅读(90) 评论(0) 推荐(0) 编辑
摘要: Logger Rate Limiter 要点:这题并不是需要circular buffer的那题。因为没有用统计过去10秒的个数来throttle,所以不需要sliding window,而只是过去1个的timestamp来比较,所以用个hashmap记录过去的时间点即可 秒的间隔计算:过去10秒, 阅读全文
posted @ 2016-07-07 20:47 absolute100 阅读(152) 评论(0) 推荐(0) 编辑
摘要: Design Hit Counter 要点:因为是second granularity,所以可以用以秒为单位的circular buffer方法。这题简单在只需要count过去300秒的,增加难度可以count过去秒,分钟,小时。 2个时间点都有可能更新超时的统计:query和hit 一种简单方法是 阅读全文
posted @ 2016-07-07 20:46 absolute100 阅读(141) 评论(0) 推荐(0) 编辑
摘要: Bomb Enemy 要点: 什么题?目标是合适的地方摆1个炸弹优化最大攻击怪物数, 为什么这个目标和横竖统计有关(内在关联是什么?):炸弹的特性:分段,某个点和某段内的前后方向都有关联。所以统计段内怪物数 处理的方向是逐行遍历matrix,所以”预处理"可以同时进行:在某段的左边界做,之后其他同段 阅读全文
posted @ 2016-07-07 20:45 absolute100 阅读(95) 评论(0) 推荐(0) 编辑
摘要: Sort Transformed Array 要点: 知道了解法就容易了:本质:如何把一个单调的转化成双向单调的:结构包括两部分:原array的选择方向(双指针)和填结果array的方向。 min/max在input sorted array的中间点,所以双向验证,另外根据开口方向,决定从两边走是越 阅读全文
posted @ 2016-07-07 20:45 absolute100 阅读(100) 评论(0) 推荐(0) 编辑
摘要: Longest Palindromic Substring 要点:manchane method太复杂。这里就用dp实现O(n^2)。一种是用boolean dp记录所有左右边界。二重loop所有左右边界。注意为了保证用到dp,一定是距离小的先计算,所以这里的循环方式是外层len(2开始),内层一点 阅读全文
posted @ 2016-07-06 03:25 absolute100 阅读(166) 评论(0) 推荐(0) 编辑
摘要: Data Stream as Disjoint Intervals 要点:因为data stream处理中任何中间结果interval之间都是disjoint的,所以可以直接用binary search tree(而不需要Interval tree)。BST是按interval start存储。 m 阅读全文
posted @ 2016-07-05 03:45 absolute100 阅读(111) 评论(0) 推荐(0) 编辑
摘要: Russian Doll Envelopes 要点:题目实际不是难题,就是排序+longest increasing subsequence。 有一点需要注意,因为width相等的情况是不能二者同时考虑的。简单的技巧是对width相等时height大的在前,这样在做LIS的时候不可能二者同时被选。 阅读全文
posted @ 2016-07-05 03:43 absolute100 阅读(129) 评论(0) 推荐(0) 编辑
摘要: Water and Jug Problem 要点:利用了Bézout’s theorem:mx+n y对于任意m,n都是gcd(x,y)的整倍数。所以z是gcd整倍数并且zy: x,y=y,x gval = gcd(x,y) print gval if gval==0: return z==0 re 阅读全文
posted @ 2016-07-05 03:43 absolute100 阅读(86) 评论(0) 推荐(0) 编辑
摘要: Expression Add Operators 要点:难题,参考了https://discuss.leetcode.com/topic/30089/clean python dfs with comments。 这里因为只有+、 、 ,没有(,),\,所以实际上不从左向右的情况只有+/ 遇到 ,并 阅读全文
posted @ 2016-07-05 03:42 absolute100 阅读(257) 评论(0) 推荐(0) 编辑
摘要: Largest Divisible Subset 要点: 因为先排序,所以符合条件的一定是成倍递增序列,这题就和longest increasing subsequence类似了。 想出来的解是dp[i]表示所有前i个数的可能解,这样实际上就是把所有子集都存起来,导致了TLE。而实际上这类题都以dp 阅读全文
posted @ 2016-07-04 03:54 absolute100 阅读(78) 评论(0) 推荐(0) 编辑
摘要: Sum of Two Integers 要点: 基本原理就是a^b得到无进位和,a&b得到carry并左移继续计算,这个算法适用于negative因为signed integer都是2’s complement表示的,所以加法都是统一算法。 上述算法只适合java,python因为自动整数越界为lo 阅读全文
posted @ 2016-07-04 03:51 absolute100 阅读(108) 评论(0) 推荐(0) 编辑
摘要: Valid Perfect Square 要点:binary search的题,可以扩展到double,就变成2以上的情况n/2,但是 阅读全文
posted @ 2016-07-04 03:51 absolute100 阅读(84) 评论(0) 推荐(0) 编辑
摘要: Count Numbers with Unique Digits 要点:排列组合题,思路是对的,但是实现上出了不少问题 想到了要不同位个数累加。这是因为比如1位,000 009如果按三位计算都是不符合的,但是实际是要累积的。 当时忽略了0不能在最高位。所以把最高位但提出来 9(总共10不包括0),剩 阅读全文
posted @ 2016-07-03 03:58 absolute100 阅读(93) 评论(0) 推荐(0) 编辑
摘要: Design Twitter 要点:这实际是一道设计题,这类题通常就是选择data structure来实现get和put逻辑。 twitter主要操作是getNewsFeed,这题的要求是某user和其followee的最近10个tweets。类似n way merge,用PriorityQueu 阅读全文
posted @ 2016-07-01 04:01 absolute100 阅读(117) 评论(0) 推荐(0) 编辑
摘要: Wiggle Sort II 要点:这题就是关于如何按序插入,基本的logic这个帖子介绍的很清楚:https://leetcode.com/discuss/76965/3 lines python with explanation proof。简单的方法就是先排序,O(nlgn)。python可以 阅读全文
posted @ 2016-06-29 04:04 absolute100 阅读(90) 评论(0) 推荐(0) 编辑
摘要: Top K Frequent Elements 要点: java: PriorityQueue的definition:Comparator:是一个generic interface,所以new Comparator():加括号表示,同时implement interface 用 {}。内部实现@Ov 阅读全文
posted @ 2016-06-29 04:04 absolute100 阅读(86) 评论(0) 推荐(0) 编辑
摘要: Flatten Nested List Iterator 要点:题的本质是建立next和isInteger/getList/getInteger的关系,考点和tree的遍历类似:用stack存dfs的trace,这样可以backtrack到之前层的结点。 注意NestedInteger类的表示,清楚 阅读全文
posted @ 2016-06-29 04:03 absolute100 阅读(143) 评论(0) 推荐(0) 编辑
摘要: Counting Bits 要点:这题一开始没想出来,看了hint解出来了。估计想时间长点是可以想出来的。就是gray code的类似思路,新序列就是已经得到结果的序列左边高位补1,所以即1的个数+1。所以按这个顺序iterate多遍直到某个值超过了num class Solution(object 阅读全文
posted @ 2016-06-28 04:08 absolute100 阅读(95) 评论(0) 推荐(0) 编辑
摘要: Odd Even Linked List 要点:实现题,最简单的方法就是交错的连接even/odd的下一个结点。p1表示当前已经连好的odd,p2表示当前已经连好的even。最后只需要开始记录even的head,就可以用最后p1.next来连成一个linked list。 invariant是p2 阅读全文
posted @ 2016-06-28 04:07 absolute100 阅读(91) 评论(0) 推荐(0) 编辑
摘要: Increasing Triplet Subsequence 要点: 第一遍没想出来,想到了要记录min (m1) 和min pair (m2),其实就差一步。这题tricky的地方是m1和m2是各自独立的两个状态:m2差一步就进化到triplet,而m1还差两步。可能m2对应当前m1进化的,也有可 阅读全文
posted @ 2016-06-27 04:10 absolute100 阅读(77) 评论(0) 推荐(0) 编辑
摘要: Reconstruct Itinerary 要点:注意这题不是让找cycle,只需要从”JFK"开始cover所有站就可以。所以基本方法就是按图做dfs遍历直到找到一条valid的路径 dfs找路径的要点有二:1是返回boolean来表示是否找到,从而可以直接返回,2是在每一个点分支要不断push= 阅读全文
posted @ 2016-06-26 06:05 absolute100 阅读(151) 评论(0) 推荐(0) 编辑
摘要: Reconstruct Itinerary 要点:注意这题不是让找cycle,只需要从”JFK"开始cover所有站就可以。所以基本方法就是按图做dfs遍历直到找到一条valid的路径 dfs找路径的要点有二:1是返回boolean来表示是否找到,从而可以直接返回,2是在每一个点分支要不断push= 阅读全文
posted @ 2016-06-26 04:12 absolute100 阅读(130) 评论(0) 推荐(0) 编辑
摘要: Verify Preorder Serialization of a Binary Tree 要点:第一遍就做出来了,invalid的只有2种情况:一是在某个结点时(包括null)发现没有字符了,二是当遍历完在最外层,发现还有字符没用 错误点: 因为index是到最后一个元素中止的,所以情况2的过界 阅读全文
posted @ 2016-06-25 04:14 absolute100 阅读(101) 评论(0) 推荐(0) 编辑
摘要: Additive Number 要点:实现题,三层loop:方式是外层确定前2个数的边界i,第二层确定第一个数的边界j。 确定了前两个数后就loop是否为正确序列:这里最好另用个函数,why? 逻辑上False退出循环后要进入下一次,但是True的情况也是从内层循环结束,但不进入下一层。如果用函数, 阅读全文
posted @ 2016-06-24 04:15 absolute100 阅读(88) 评论(0) 推荐(0) 编辑
摘要: Maximum Product of Word Lengths 要点:一开始的方法想错了,以为可以用并查集做,把凡是有相同char的word放到同一组中,然后在不同的组之间做乘法。但是后来发现这个想法有bug,比如ab,bc,cd是同一组,但是ab和cd也可以做乘法。所以并查集的适用条件是所有元素要 阅读全文
posted @ 2016-06-23 04:17 absolute100 阅读(78) 评论(0) 推荐(0) 编辑
摘要: Coin Change 要点:一开始用了按amount循环的dp方法,结果对于大数,比如9936就TLE了。dp实际就是一种bottom up的方法(而recursion是top down)。所以另一种dp方法就是把已经cover的值放到集合中,下一步从集合中取出每一个值更新后再加入集合。可以看出这 阅读全文
posted @ 2016-06-21 04:20 absolute100 阅读(99) 评论(0) 推荐(0) 编辑
摘要: Bulb Switcher 要点:数学题一直是弱项,关键是推理思维总是不清晰。比如这题,模糊的知道因子对决定了最后亮灯的个数,但是具体的推理就没记住 先说答案,因为code极其简单:int(math.sqrt(n)) 开始的时候理解错误,every second的意思是从2开始每隔2(1开始计数), 阅读全文
posted @ 2016-06-21 04:19 absolute100 阅读(100) 评论(0) 推荐(0) 编辑
摘要: Maximum Product of Word Lengths class Solution(object): def maxProduct(self, words): """ :type words: List[str] :rtype: int """ es = [] for w in words 阅读全文
posted @ 2016-06-20 04:24 absolute100 阅读(89) 评论(0) 推荐(0) 编辑
摘要: Bulls and Cows 要点:类似于Word Pattern,guess和secret要存成两个counts,因为guess中了的可能在secret之前出现,vice versa。另一种方法是可以多遍统计:先过一遍secret,然后过一遍guess统计cows,最后统计bulls调整cows 阅读全文
posted @ 2016-06-20 04:22 absolute100 阅读(112) 评论(0) 推荐(0) 编辑
摘要: Serialize and Deserialize Binary Tree 要点:preorder traversal,node allocation是在function里:意思是如果有一个新值,那么allocate一个node,同时因为python不支持pass by reference,所以le 阅读全文
posted @ 2016-06-19 04:26 absolute100 阅读(147) 评论(0) 推荐(0) 编辑
摘要: Word Pattern 要点:和isomorphic string就是同一题。 错误点: 别忘了先比长度 阅读全文
posted @ 2016-06-18 04:28 absolute100 阅读(76) 评论(0) 推荐(0) 编辑