leetcode 376. 摆动序列
作者:互联网
解法1:贪心。
除去中间单调的节点即可。
class Solution {
public int wiggleMaxLength(int[] nums) {
int n=nums.length;
int ans=1;
int prevSub=0;
for(int i=1;i<n;i++){
int sub=nums[i]-nums[i-1];
if((sub<0&&prevSub>=0)||(sub>0&&prevSub<=0)){
ans++;
prevSub=sub;
}
}
return ans;
}
}
解法2:动态规划。
dp[i][0]: 以nums[i]结尾且结尾是山峰的子序列长度
dp[i][1]: 以nums[i]结尾且结尾是山谷的子序列长度
class Solution {
public int wiggleMaxLength(int[] nums) {
int n=nums.length;
int[][] dp=new int[n][2];
dp[0][0]=1;
dp[0][1]=1;
for(int i=1;i<n;i++){
dp[i][0]=1;
dp[i][1]=1;
for(int j=0;j<i;j++){
if(nums[i]>nums[j]){
dp[i][0]=Math.max(dp[i][0],dp[j][1]+1);
}
}
for(int j=0;j<i;j++){
if(nums[i]<nums[j]){
dp[i][1]=Math.max(dp[i][1],dp[j][0]+1);
}
}
}
return Math.max(dp[n-1][0],dp[n-1][1]);
}
}
标签:wiggleMaxLength,结尾,nums,int,序列,摆动,leetcode,dp,376 来源: https://www.cnblogs.com/livingsu/p/15912418.html