随笔分类 -  LeetCode

上一页 1 2 3 4 5 6 ··· 10 下一页
摘要:一看知道是dp题,但是和常规dp很不一样,如何formulate问题很难想。 dp[i][j] 表示最后长度L的list前 i 个中有 j 首unique的歌。dp[L][N] 就是我们的答案。 第一维i很好想。由于题目有要求其他k首歌放过以后才能重复播放歌曲,因此我们要记录其他歌曲的播放情况。因此 阅读全文
posted @ 2019-09-06 08:15 約束の空 阅读(158) 评论(0) 推荐(0)
摘要:直接根据最短distance greedy做。 用了优先队列,C++ less<type> 是大的先,所以我们可以重载<符号,把逻辑反过来。 第二种写法不用结构体,节省了空间复杂度,但是每次cmp的时候都要计算dist,但是时间会翻倍。 这里采用了 lambda funtion,注意 priorit 阅读全文
posted @ 2019-09-05 12:05 約束の空 阅读(1106) 评论(0) 推荐(0)
摘要:比较难的dp问题。由于A最多出现一次,我们先不考虑A,只考虑存在L和P的情况,最后插入A。 dp[i][0] 前i个且最后为L,dp[i][1] 前i个且最后为P 递推公式如下 dp[i][0] 说明当前最后是L,那么前面可能是L或者A。前面如果是L,那么再前面只能是A,所以是 dp[i-2][1] 阅读全文
posted @ 2019-09-05 09:48 約束の空 阅读(458) 评论(0) 推荐(0)
摘要:dfs的问题,第一眼看上去不难,但是由于地图和位置信息都是不可知的,这导致 dfs 的时候坐标无从下手,同样判断是否访问过的 visited 也不好处理 。 本题的关键点在于,如何构建构建坐标系。令当前坐标为坐标原点,记录当前的方向,这样我们就能知道我们每次 move 以后的正确坐标了。然后就是标准 阅读全文
posted @ 2019-09-05 08:15 約束の空 阅读(140) 评论(0) 推荐(0)
摘要:dp问题,一维是没法dp的,因为我们还要记录一个diff才能判断是否是Arithmetic Sequence。 dp[i][diff] 表示以 A[i] 结尾,等差为 diff 的最大长度。从这种角度来看本题和 LeetCode 300. Longest Increasing Subsequence 阅读全文
posted @ 2019-09-04 06:36 約束の空 阅读(240) 评论(0) 推荐(0)
摘要:除法除了构成1,是没有作用的。 本题可以转化为,用 x/x,x,x*x,x*x*x,... 构建target。 由于题目中限定target为正数,因此肯定有一项为正,我们可以调整位置是的正项放在最前面。对于每一项,考虑前面的符号,我们可以得到构成这些项所需的符号数。第一项的正号是不需要的,因此最后答 阅读全文
posted @ 2019-09-03 05:04 約束の空 阅读(294) 评论(0) 推荐(0)
摘要:方法一:BFS bfs所有可能的instruction,需要剪枝。 方法二:DP 定义dp[t]为以初始速度为1,向终点行进 t 所需的最小instruction数量。初始条件 dp[0]=0 Lemma:到达t的操作可以表示为 A^k1 R A^k2 R .... A^kl,我们可以重新排列,使得 阅读全文
posted @ 2019-09-03 00:35 約束の空 阅读(215) 评论(0) 推荐(0)
摘要:本题是有向图找 Euler Path 的问题。可以用 Hierholzer’s Algorithm for the directed graph https://www.geeksforgeeks.org/hierholzers-algorithm-directed-graph/ Hierholze 阅读全文
posted @ 2019-08-26 13:49 約束の空 阅读(205) 评论(0) 推荐(0)
摘要:Two Heaps 本题是实质是如何最快找到最中间的数的数。每次都sort效率很低。 由于中位数实质就是将数组分为两半,比如说左半边a,右半边b,那么计算median只要考虑 a[-1] 和 b[0] 即可 (奇数偶数的情况都类似)。 顺着这个思路想下去,难点就是当新的num到来,如果保证两边数组的 阅读全文
posted @ 2019-08-26 03:29 約束の空 阅读(127) 评论(0) 推荐(0)
摘要:典型Trie问题,首先根据sentences和times建树。 然后由于input是一个个char输入的,我们只需每次根据输入的字符往下走即可。然后dfs该节点得到所有以此为前缀的字符串,然后根据题目要求排序取出最大的三个即可。 如果输入是'#',我们要把迄今的input加到Trie Tree里。我 阅读全文
posted @ 2019-08-19 06:18 約束の空 阅读(191) 评论(0) 推荐(0)
摘要:方法一:Priority Queue 由于相同的间隔至少为n,所以可以把 n+1 看作一组。利用greedy的思想,每次按照剩余的frequency来填充当前 n+1 个time slot。注意需要一个临时的数组记录新的frequency,等 n+1 个time slot分配完以后再放入优先队列中。 阅读全文
posted @ 2019-08-05 11:24 約束の空 阅读(188) 评论(0) 推荐(0)
摘要:字符串题,很自然想到dp去做。由于print时可以自由选择开始位置并覆盖原有的部分,比如先打印5个a,"aaaaa",然后在index 2的位置打印2个b,得到 "aabba"。 因此对于一个字符串s,我们可以通过其最后一个字符,找到这个字符可能是和前面某个位置的相同字符一起打印出来的。 比如 "a 阅读全文
posted @ 2019-08-05 07:21 約束の空 阅读(277) 评论(0) 推荐(0)
摘要:Basic Calculator 由于只需要实现加减和括号,除了括号不需要考虑运算的优先级,所以可以直接one pass做。 思路是将 a-b 等价为 a+(-b),这样所有的运算都是加法,而负号只要乘以后面的数即可。 建立一个stack,遇到左括号时,压栈迄今为止的和以及括号前的符号。遇到对应右括 阅读全文
posted @ 2019-07-31 16:05 約束の空 阅读(236) 评论(0) 推荐(0)
摘要:看起来是 LeetCode 221. Maximal Square 的拓展,但是完全不能用那一题dp的思想。 最主要的问题是,矩形没法和正方形一样保证 较小的边+1后形成的矩形一定是包含在其他图形中。 二维的问题我们想办法转换为一维的问题去做。类似 LeetCode 363. Max Sum of 阅读全文
posted @ 2019-07-31 14:36 約束の空 阅读(170) 评论(0) 推荐(0)
摘要:方法一:DP (TLE?) brute force需要先枚举左上顶点 O(mn),右下顶点 O(mn),然后扫描面积 O(mn),总时间复杂度 O((mn)^3)。 我们可以用DP优化。利用二维prefix sum,计算出所有(0,0)到(i,j)的面积。这样对于任意一个矩形,我们可以通过大矩形减去 阅读全文
posted @ 2019-07-30 13:30 約束の空 阅读(280) 评论(0) 推荐(0)
摘要:minmax的问题,通常解法是用dfs。对于本题,可以记录 [mouse,cat,turn] 来递归,根据是谁的turn决定策略。但是本题由于平局存在,而平局很难判断 (别的选择都不利,且有一种走法在recursion stack里存在,才能说明选平局),所以dfs自顶向下搜索写起来比较困难 (df 阅读全文
posted @ 2019-07-29 13:01 約束の空 阅读(251) 评论(0) 推荐(0)
摘要:Backtracing + Pruning (TLE) 最容易的解法是 backtracing,但是即使加了剪枝,还是会超时。 Backtracing + Memoization 加一个memo减少递归次数。由于上面的写法的递归函数返回void,要修改为有返回值的写法才能运用memo。 让 dfs 阅读全文
posted @ 2019-07-29 06:25 約束の空 阅读(1830) 评论(0) 推荐(0)
摘要:Best Time to Buy and Sell Stock II Best Time to Buy and Sell Stock III 比较难想到,分别记录四个状态: 1buy,1buy1sell,2buy1sell,2buy2sell。 构建四个dp数组,例如,1buy1sell[i] = 阅读全文
posted @ 2019-07-28 12:39 約束の空 阅读(131) 评论(0) 推荐(0)
摘要:需要利用 sparse 的特性来做这道题。扫描A的每一个元素 A[i][j],考虑A[i][j]会被B中哪些元素乘到。 对于A的第i行 A[i][*],会乘以B的每一列 B[*][k] ∀k,得到 res[i][k]。因此,最后 res[i][k] += A[i][j] * B[j][k]。 这样的 阅读全文
posted @ 2019-07-28 05:55 約束の空 阅读(226) 评论(0) 推荐(0)
摘要:经典line sweep问题,和 perfect rectangle 很类似,但是要考虑多个矩形左边界一样的情况,加个id来区分。 和另一道类似的题 the skyline problem 不同的是,没有很多 corner cases,对 x 排序非常简单。 难点是在 active set 里,和 阅读全文
posted @ 2019-07-26 14:19 約束の空 阅读(243) 评论(0) 推荐(0)

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