随笔分类 -  LeetCode

1 2 3 4 5 ··· 10 下一页
摘要:很容易联想到 at most distinct k 等一连串sliding window的问题,但是真正做起来发现困难重重。 具体来说,通过sliding window我们的确可以得到一个个以a[i]结尾的,exactly k个不同元素的最长window。但是我们很难求出这样的window中一共有多 阅读全文
posted @ 2019-11-06 14:14 約束の空 阅读(221) 评论(0) 推荐(0)
摘要:Hashtable + BST 用hashtable保存key->Node,另外用一个set<Node>来根据freq和time进行排序,保证容量满时删除的是LFU的节点。 注意这里hashtable的value存的是Node,不是指针也不是set的iterator。因为用指针只能做到从set里删除 阅读全文
posted @ 2019-11-02 11:59 約束の空 阅读(150) 评论(0) 推荐(0)
摘要:DP 由于括号匹配的特殊性,合法的括号匹配最后一定是')',因此我们可以记录以每个字符为结尾的最长括号匹配数。 dp[i] = 以s[i]结尾的最长括号匹配数 递推公式有两种可能: 1. 如果s[i-1]=='(',dp[i] = dp[i-2] + 2 2. 如果s[i-1]==')',我们可以通 阅读全文
posted @ 2019-10-15 04:38 約束の空 阅读(125) 评论(0) 推荐(0)
摘要:57. Insert Interval 由于intervals已经有序,不需要排序。本题是要返回一个interval数组,所以并不需要对原数组进行改动。 方法一: 由于intervals有序,我们可以二分找到应该插入的位置,然后merge intervals即可。 时间复杂度 O(n) 方法二: 我 阅读全文
posted @ 2019-10-12 05:00 約束の空 阅读(228) 评论(0) 推荐(0)
摘要:经典backtracing的问题。我们可以记录每行,每列,每个box那些数字出现过,快速判断当前填入的数字是否有重复。 上述方法是dfs(i,j),导致没到一行的末尾要换行,比较繁琐。 可以把所有空格都放到一个vector里,dfs这个vector的下标即可。 阅读全文
posted @ 2019-09-30 23:57 約束の空 阅读(111) 评论(0) 推荐(0)
摘要:Recursive 对于s的每一个节点,我们都要调用isSame来判断两棵树是否相同。 时间复杂度 O(mn) PreOrder + Serialize 本质就是用preOrder来serialize两个树。如果t是子树,那么序列化之后,t一定是s的字串。 假设concatenate长度为n的字符串 阅读全文
posted @ 2019-09-27 11:07 約束の空 阅读(123) 评论(0) 推荐(0)
摘要:Sliding Window (fixed length) 比较straightforward的方法,用长度为p的window去扫描,判断两个hashtable统计结果是否相同。在不清楚C++里unordered_map有没有重载==的情况写,可以用两个vector来做counter。 Slidin 阅读全文
posted @ 2019-09-26 08:56 約束の空 阅读(150) 评论(0) 推荐(0)
摘要:本题抽象一下就是如何deep copy图的问题。由于random指针的存在,导致我们按顺序copy的时候,copy的random指针指向的node可能还没有生成。如何解决这个问题是本题的关键。 Recursive 如果递归来做,上述问题很好解决,没有生成的节点递归生成即可。 但是我们需要用一个has 阅读全文
posted @ 2019-09-25 11:44 約束の空 阅读(169) 评论(0) 推荐(0)
摘要:74. Search a 2D Matrix 看起来是2d的问题,但是实际上依旧可以用一维二分的思想来做,无非就是计算横纵坐标而已。 下面用了开区间写法,闭区间写法也是okay的。 74. Search a 2D Matrix 看起来是2d的问题,但是实际上依旧可以用一维二分的思想来做,无非就是计算 阅读全文
posted @ 2019-09-25 09:10 約束の空 阅读(174) 评论(0) 推荐(0)
摘要:如果用模拟做,需要频繁移动数组元素,导致效率很低。实际上,我们并不需要知道当前数组每个元素是什么,因为每次间隔删除元素的性质,我们可以计算出每轮过后相邻元素间隔是多少。一开始相距1,每轮过后间隔都会翻倍。由此,我们只要知道第一个元素的正确位置和还剩余多少元素,就可以知道剩余的所有元素。 需要注意的时 阅读全文
posted @ 2019-09-23 01:57 約束の空 阅读(123) 评论(0) 推荐(0)
摘要:本题和 LeetCode 114. Flatten Binary Tree to Linked List 一模一样。doubly linked list 稍微复杂一点。 Recursive PreOrder 和LC114一样,preorder来写的时候要copy next的指针。下面写法同时copy 阅读全文
posted @ 2019-09-16 08:29 約束の空 阅读(223) 评论(0) 推荐(0)
摘要:和3Sum那题非常类似。3Sum我们是固定i,令j=i+1, k=n-1。 本题由于三角形需要两边之和大于第三边,nums[i]+nums[j]>nums[k]。因此我们可以固定k,令i=0, j=k-1。 如果nums[i]+nums[j]>nums[k],说明 [i,j-1] 范围内的所有数作为 阅读全文
posted @ 2019-09-16 02:57 約束の空 阅读(205) 评论(0) 推荐(0)
摘要:Dijkstra’s Shortest Path Algorithm 实现详见:https://www.geeksforgeeks.org/dijkstras-shortest-path-algorithm-using-priority_queue-stl/ 需要注意的是,priority_queu 阅读全文
posted @ 2019-09-14 09:01 約束の空 阅读(454) 评论(0) 推荐(0)
摘要:去年准备Google面试的时候就见过这道题,现在leetcode上竟然有了。 对方的点把整个图(想象成一个graph)分为了三个部分,我们最优策略就是选择最大的那一枝,贴着对面的点放置我们的点。由此,这道题的本质变成了计算subtree节点数的题目。 时间复杂度 O(n) Followup 如果先手 阅读全文
posted @ 2019-09-10 09:03 約束の空 阅读(507) 评论(0) 推荐(0)
摘要:很有意思的一道题,对于每一个element,我们有两种选择: 1. 把它加入之前构造好的顺子中 2. 用它新开一个顺子 此处用贪心策略,如果1能满足总是先满足1,因为新开顺子可能失败,即使新开顺子成功,当1能满足的时候,将新开顺子加入之前的顺子也能成功,所以能够选择策略1的时候没必要冒风险选择策略2 阅读全文
posted @ 2019-09-10 02:55 約束の空 阅读(207) 评论(0) 推荐(0)
摘要:Stop as Node 抽象为图的问题,将每个stop作为一个节点。公交车路线上的所有stop都是互相连通的,以此构建邻接链表,然后BFS。 这种方法超时了,原因是我们构建图的时候,时间复杂度太高了。而且图里的节点数为所有stop的个数,导致BFS的时候也要花较多的时间。 Route as Nod 阅读全文
posted @ 2019-09-09 04:29 約束の空 阅读(260) 评论(0) 推荐(0)
摘要:合法的pay group里所有worker的比例是一样的,即 wage1/wage2 = quality1/quality2 推出 wage1/quality1 = wage2/quality2。 这就好办了,定义 ratio_i = wage_i/quality_i。对于一个group,ratio 阅读全文
posted @ 2019-09-08 12:11 約束の空 阅读(149) 评论(0) 推荐(0)
摘要:528. Random Pick with Weight 根据weight随机选取一个数,用 Prefix Sum+Binary Search 来解决。 https://www.geeksforgeeks.org/random-number-generator-in-arbitrary-probab 阅读全文
posted @ 2019-09-08 07:36 約束の空 阅读(207) 评论(0) 推荐(0)
摘要:62. Unique Paths 空间可以按行优化为 O(n),也可以按列优化为O(m)。 62. Unique Paths 空间可以按行优化为 O(n),也可以按列优化为O(m)。 62. Unique Paths 空间可以按行优化为 O(n),也可以按列优化为O(m)。 62. Unique P 阅读全文
posted @ 2019-09-07 08:18 約束の空 阅读(124) 评论(0) 推荐(0)
摘要:3 invalid situations case1: 2 parents no circle case2: 2 parents with circle case3: 1 parent with circle 2 main steps 1 check whether there exists a n 阅读全文
posted @ 2019-09-06 10:34 約束の空 阅读(163) 评论(0) 推荐(0)

1 2 3 4 5 ··· 10 下一页