O(n) time O(1) space
followup for infinite stream
1 | class Solution { |
找最长的子数组最多只包含一个0
1 | class Solution { |
O(n) time O(1) space
followup for infinite stream
1 | class Solution { |
找最长的子数组最多只包含一个0
1 | class Solution { |
236. Lowest Common Ancestor of a Binary Tree的followup
postorder O(n) time O(h) space
1 | /** |
1 | /** |
该仓库整理了目前比较流行的 RESTful api
设计规范,为了方便讨论规范带来的问题及争议,现把该文档托管于 Github
,欢迎大家补充!!
dp O(NL) time O(NL) space
这道题的建模应该先从如何生成一个播放列表入手,因为有K首歌之内不能重复这个限制条件,所以我们一定是要一首歌一首歌往播放列表里添加并且每次都要检查是否跟前K首歌重复,如果重复则选择另外一首歌,所以我们只考虑不重复的合法情况:
假设dp[l][n]表示对于播放表的前l首歌,去除重复的歌曲后还剩下n首歌的方案数。(即使用n首歌来生成播放表的前l首歌)
那么需要return的答案便为:dp[L][N] (因为每首歌必须至少出现一次,故这L首歌去除重复后一定有N首歌)
对于dp[l][n]的求解,需要分类讨论:
播放表的第l首歌跟前面的(l - 1)首都不一样,则对于dp[l][n],我们可以先使用(n - 1)首歌排好播放表的前(l - 1)首歌,然后从剩下的(N - (n - 1))首歌
里面再任意取一首歌,放在第l个位置,即:
dp[l][n] += dp[l - 1][n - 1] * (N - (n - 1))
播放表的第l首歌跟前面的(l - 1)首存在重复的,则对于dp[l][n],我们可以先使用n首歌排好前面的(l - 1)首歌,然后因为保证任意两首相同的歌之间至
少有k首不同的歌,故对于dp[l - 1][n]里面的方案,最后的k首歌一定不一样,故我们只需要选一首跟最后面的k首歌不一样的歌,放在第l个位置即可,即:
dp[l][n] += dp[l - 1][n] * (n - k)
此题得解,时间复杂度:O(NL)
注意一开始的初始化:dp[0][0] = 1
1 | class Solution { |
O(n) time O(1) space
l和r分别表示无法匹配的左括号跟右括号的个数
1 | class Solution { |
1 | class Solution { |
stack O(n) time O(n) space
1 | class Solution { |
O(n) time O(1) space
从后往前扫,遇到#就处理,直到两个字符串都扫完
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
O(mn) time
count cells and shared edges
res = 4 * cells - 2 * shared edges
1 | class Solution { |
1 | class Solution { |
O(n) time O(n) space
树转图+bfs
跟742. Closest Leaf in a Binary Tree类似
1 | /** |
1 | /** |
dp O(n2) time O(n2) space
区间型dp
算一下s[0:n-1]的最长回文子序列长度f[0][n - 1]
n - f[0][n - 1]是不在最长回文子序列里的即要从原字符串删除的字符个数
最后要判断n - f[0][n - 1]是否不超过k
1 | class Solution { |
bfs O(An) A是密码盘字母数,本题是10,n是密码盘个数,本题是4
1 | class Solution { |