O(n*n!) time
1 | class Solution { |
backtracking O(n*n!) time
1 | class Solution: |
1 | class Solution: |
1 | class Solution { |
O(nn) time
1 | class Solution { |
O(n*n!) time
1 | class Solution { |
backtracking O(n*n!) time
1 | class Solution: |
1 | class Solution: |
1 | class Solution { |
O(nn) time
1 | class Solution { |
greedy O(n) time O(1) space
相当于BFS一棵树
last就是当前层所能达到的最远位置(可以覆盖的地方)
curr_max是当前位置能达到的最远位置
题解比较清楚
0 1 2 3 4 i
2 3 1 1 4 nums[i]
2 4 3 4 8 i + nums[i]
0 2 2 4 4 last
2 4 4 4 8 curr_max
{0(2)} –> {1(4) 2(3)} –> {3(4) 4(8)}
意思是最开始在0,不跳的话只能到0,如果想跳到1以后需要跳一次,这一次最远跳到2,然后如果想再跳到3以后需要再跳一次,这一次至少跳到4(最远跳到8但是不需要了),因为4已经达到最远点,跳出循环
1 | class Solution: |
1 | class Solution { |
dp O(n2) time O(n) space TLE
dp[i]表示达到i所需要的最少步数
求dp[i]需要查询dp[j] where 0 <= j < i,然后+1
dp[0]肯定为0
1 | class Solution { |
backtracking best case O(m+n) time O(1) space
worst case O(mn)
1 | class Solution { |
dp O(mn) time O(mn) space
1 | class Solution: |
1 | class Solution { |
recursive
1 | class Solution { |
O(mn) time O(m+n) space
1 | class Solution: |
1 | class Solution { |
O(n)
跟11. Container With Most Water方法几乎一样
1 | class Solution: |
1 | class Solution { |
1 | class Solution { |
O(n) time O(1) space
负号法
1 | class Solution: |
1 | class Solution { |
类似桶排序,每个数都应该放在对应的位置,即 nums[i] == nums[nums[i] - 1],所以不停交换数,尽可能把每个数挪到对应的位置
1 | class Solution: |
1 | class Solution { |
backtracking
对比39. Combination Sum这道题candidates可能有dup且每个candidate只能用一次
1 | class Solution: |
1 | class Solution: |
1 | class Solution { |
backtracking
如果问个数就是背包
1 | class Solution: |
1 | class Solution: |
1 | class Solution { |
sliding window
1 | class Solution: |
1 | class Solution: |
1 | class Solution { |
1 | class Solution { |
iterative
1 | class Solution { |
1 | class Solution { |
1 | class Solution { |
backtracking
预处理board把每个cell能算出来的都填上,再跑backtracking试数
先写backtracking,再写预处理优化
1 | class Solution { |
没有预处理
1 | class Solution: |
1 | class Solution { |