mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-08 00:43:04 +08:00
Merge pull request #2026 from juguagua/leetcode-add-complexity-analysis-DP
添加复杂度分析:动态规划部分
This commit is contained in:
@ -101,6 +101,11 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(nm)
|
||||
* 空间复杂度: O(n)
|
||||
|
||||
|
||||
|
||||
代码中m表示最多可以爬m个台阶,代码中把m改成2就是本题70.爬楼梯可以AC的代码了。
|
||||
|
||||
## 总结
|
||||
|
@ -218,6 +218,10 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
* 时间复杂度: O(n * m)
|
||||
* 空间复杂度: O(n * m)
|
||||
|
||||
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
|
@ -149,6 +149,11 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(n * m)
|
||||
* 空间复杂度: O(n * m)
|
||||
|
||||
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
|
||||
|
@ -156,6 +156,11 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(n * k),其中 n 为 prices 的长度
|
||||
* 空间复杂度: O(n * k)
|
||||
|
||||
|
||||
|
||||
当然有的解法是定义一个三维数组dp[i][j][k],第i天,第j次买卖,k表示买还是卖的状态,从定义上来讲是比较直观。
|
||||
|
||||
但感觉三维数组操作起来有些麻烦,我是直接用二维数组来模拟三维数组的情况,代码看起来也清爽一些。
|
||||
|
@ -108,6 +108,9 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(n)
|
||||
* 空间复杂度: O(n)
|
||||
|
||||
## 总结
|
||||
|
||||
打家劫舍是DP解决的经典题目,这道题也是打家劫舍入门级题目,后面我们还会变种方式来打劫的。
|
||||
|
@ -82,6 +82,11 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(n)
|
||||
* 空间复杂度: O(n)
|
||||
|
||||
|
||||
|
||||
## 总结
|
||||
|
||||
成环之后还是难了一些的, 不少题解没有把“考虑房间”和“偷房间”说清楚。
|
||||
|
@ -127,6 +127,10 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(n * √n)
|
||||
* 空间复杂度: O(n)
|
||||
|
||||
|
||||
同样我在给出先遍历物品,在遍历背包的代码,一样的可以AC的。
|
||||
|
||||
```CPP
|
||||
@ -145,6 +149,8 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
* 同上
|
||||
|
||||
|
||||
## 总结
|
||||
|
||||
|
@ -106,6 +106,10 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
* 时间复杂度: O(n^2)
|
||||
* 空间复杂度: O(n)
|
||||
|
||||
|
||||
|
||||
## 总结
|
||||
|
||||
|
@ -133,6 +133,11 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(n * amount),其中 n 为 coins 的长度
|
||||
* 空间复杂度: O(amount)
|
||||
|
||||
|
||||
|
||||
对于遍历方式遍历背包放在外循环,遍历物品放在内循环也是可以的,我就直接给出代码了
|
||||
|
||||
```CPP
|
||||
@ -154,6 +159,8 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
* 同上
|
||||
|
||||
|
||||
## 总结
|
||||
|
||||
|
@ -130,6 +130,11 @@ public:
|
||||
|
||||
```
|
||||
|
||||
* 时间复杂度: O(target * n),其中 n 为 nums 的长度
|
||||
* 空间复杂度: O(target)
|
||||
|
||||
|
||||
|
||||
C++测试用例有两个数相加超过int的数据,所以需要在if里加上dp[i] < INT_MAX - dp[i - num]。
|
||||
|
||||
但java就不用考虑这个限制,java里的int也是四个字节吧,也有可能leetcode后台对不同语言的测试数据不一样。
|
||||
|
@ -156,6 +156,11 @@ public:
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(kmn),k 为strs的长度
|
||||
* 空间复杂度: O(mn)
|
||||
|
||||
|
||||
|
||||
## 总结
|
||||
|
||||
不少同学刷过这道题,可能没有总结这究竟是什么背包。
|
||||
|
@ -144,6 +144,11 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
* 时间复杂度: O(n^2)
|
||||
* 空间复杂度: O(n^2)
|
||||
|
||||
|
||||
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
|
@ -179,6 +179,11 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
* 时间复杂度: O(mn),其中 m 是amount,n 是 coins 的长度
|
||||
* 空间复杂度: O(m)
|
||||
|
||||
|
||||
是不是发现代码如此精简,哈哈
|
||||
|
||||
## 总结
|
||||
|
@ -104,6 +104,10 @@ public:
|
||||
};
|
||||
|
||||
```
|
||||
* 时间复杂度: O(n * m)
|
||||
* 空间复杂度: O(n * m)
|
||||
|
||||
|
||||
|
||||
### 动态规划二
|
||||
|
||||
@ -127,6 +131,10 @@ public:
|
||||
};
|
||||
|
||||
```
|
||||
* 时间复杂度: O(n * m)
|
||||
* 空间复杂度: O(n * m)
|
||||
|
||||
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
|
@ -62,6 +62,10 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
* 时间复杂度: O(n * m)
|
||||
* 空间复杂度: O(n * m)
|
||||
|
||||
|
||||
|
||||
## 总结
|
||||
|
||||
|
@ -124,6 +124,10 @@ public:
|
||||
}
|
||||
};
|
||||
```
|
||||
* 时间复杂度: O(n * m),其中 n 和 m 分别为 text1 和 text2 的长度
|
||||
* 空间复杂度: O(n * m)
|
||||
|
||||
|
||||
|
||||
## 其他语言版本
|
||||
|
||||
|
Reference in New Issue
Block a user