O(n) time
通用解法
1 | class Solution { |
1 | class Solution { |
recursive
worst case O(n2) time
1-2*3 ==> 0+1+-2*3+
遇到左括号找对应的右括号递归处理
1 | class Solution { |
stack O(n) time O(n) space
1 | class Solution { |
O(n) time
通用解法
1 | class Solution { |
1 | class Solution { |
recursive
worst case O(n2) time
1-2*3 ==> 0+1+-2*3+
遇到左括号找对应的右括号递归处理
1 | class Solution { |
stack O(n) time O(n) space
1 | class Solution { |
bfs + dfs O(nm) n是单词个数 m是单词平均长度
这道题的本质是求单源最短路径,应该使用dijkstra算法,这样可以只记录到每个点最短的那些路径,避免把较长的路径也记录下来
dijkstra把从beginWord到其他词(包括endWord)的所有最短路径都找出来(用邻接表)
再用dfs把到endWord的所有最短路径打印出来
1 | class Solution { |
1 | class Solution { |
union-find O(n) time O(n) space
1 | class Solution { |
O(n) stack
1 | class Solution { |
O(n) DFS
用这个
1 | class Solution { |
1 | class Solution { |
这道题考分析,题目要求从1到n每次按其倍数改变灯泡状态,对于灯泡i来说,i的约数要不是偶数个要不是奇数个,奇数个约数的数是完全平方数(square number),所以题目转变成从1到n找完全平方数的个数,即sqrt(n)
O(logn) time O(1) space
1 | class Solution { |
1 | class Solution { |
O(sqrt(n)) time O(1) space
1 | class Solution { |
DFS O(mn*4k) mn是board的宽和长,k是word长度
1 | class Solution { |
O(1) time O(k) space
用左闭右开区间[b, e)
1 | class MyCircularQueue { |
topological sort
O(V+E) time O(V+E) space
dfs
1 | class Solution { |
O(n) time
要确认一下单词长度是否会超过limit
1 | class Solution { |
1 | class Solution { |
这个题要看数的范围能不能用rolling hash,不行的话就得用dp
bisection+rolling hash O((m + n)log(min(m, n))) time O(m + n) space
思路就是二分可能的非法结果,找到第一个(最小的)非法结果,即能找到最大的合法结果,对每个非法结果(长度),分别枚举两个数组的子数组进行比对,这里引入rolling hash来加速,即把第一个数组的指定长度的子数组的rolling hash记录下来,再分别计算第二个数组的子数组的rolling hash值进行比对,如果能找到一致的值再挨个比对两个子数组的每个数
1 | class Solution { |
dp O(mn) time O(mn) space
1 | class Solution { |