其他分享
首页 > 其他分享> > leetcode 376. 摆动序列

leetcode 376. 摆动序列

作者:互联网

image

解法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