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

浙公网安备 33010602011771号