添加 0376.摆动序列 动态规划版本(Python, C)

This commit is contained in:
dcj_hp
2022-07-20 01:11:00 +08:00
parent 0648f31efd
commit 50b9753b64

View File

@ -228,6 +228,8 @@ class Solution {
### Python
**贪心**
```python
class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
@ -240,7 +242,30 @@ class Solution:
return res
```
**动态规划**
```python
class Solution:
def wiggleMaxLength(self, nums: List[int]) -> int:
# 0 i 作为波峰的最大长度
# 1 i 作为波谷的最大长度
# dp是一个列表列表中每个元素是长度为 2 的列表
dp = []
for i in range(len(nums)):
# 初始为[1, 1]
dp.append([1, 1])
for j in range(i):
# nums[i] 为波谷
if nums[j] > nums[i]:
dp[i][1] = max(dp[i][1], dp[j][0] + 1)
# nums[i] 为波峰
if nums[j] < nums[i]:
dp[i][0] = max(dp[i][0], dp[j][1] + 1)
return max(dp[-1][0], dp[-1][1])
```
### Go
```golang
func wiggleMaxLength(nums []int) int {
var count,preDiff,curDiff int
@ -324,6 +349,7 @@ impl Solution {
### C
**贪心**
```c
int wiggleMaxLength(int* nums, int numsSize){
if(numsSize <= 1)
@ -349,6 +375,44 @@ int wiggleMaxLength(int* nums, int numsSize){
}
```
**动态规划**
```c
int max(int left, int right)
{
return left > right ? left : right;
}
int wiggleMaxLength(int* nums, int numsSize){
if(numsSize <= 1)
{
return numsSize;
}
// 0 i 作为波峰的最大长度
// 1 i 作为波谷的最大长度
int dp[numsSize][2];
for(int i = 0; i < numsSize; i++)
{
dp[i][0] = 1;
dp[i][1] = 1;
for(int j = 0; j < i; j++)
{
// nums[i] 为山谷
if(nums[j] > nums[i])
{
dp[i][1] = max(dp[i][1], dp[j][0] + 1);
}
// nums[i] 为山峰
if(nums[j] < nums[i])
{
dp[i][0] = max(dp[i][0], dp[j][1] + 1);
}
}
}
return max(dp[numsSize - 1][0], dp[numsSize - 1][1]);
}
```
### TypeScript