mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
Merge pull request #1533 from dcj00/master
添加 0376.摆动序列 动态规划版本(Python, C)
This commit is contained in:
@ -228,6 +228,8 @@ class Solution {
|
|||||||
|
|
||||||
### Python
|
### Python
|
||||||
|
|
||||||
|
**贪心**
|
||||||
|
|
||||||
```python
|
```python
|
||||||
class Solution:
|
class Solution:
|
||||||
def wiggleMaxLength(self, nums: List[int]) -> int:
|
def wiggleMaxLength(self, nums: List[int]) -> int:
|
||||||
@ -240,7 +242,30 @@ class Solution:
|
|||||||
return res
|
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
|
### Go
|
||||||
|
|
||||||
```golang
|
```golang
|
||||||
func wiggleMaxLength(nums []int) int {
|
func wiggleMaxLength(nums []int) int {
|
||||||
var count,preDiff,curDiff int
|
var count,preDiff,curDiff int
|
||||||
@ -324,6 +349,7 @@ impl Solution {
|
|||||||
|
|
||||||
### C
|
### C
|
||||||
**贪心**
|
**贪心**
|
||||||
|
|
||||||
```c
|
```c
|
||||||
int wiggleMaxLength(int* nums, int numsSize){
|
int wiggleMaxLength(int* nums, int numsSize){
|
||||||
if(numsSize <= 1)
|
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
|
### TypeScript
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user