LeetCode376. Wiggle Subsequence

来源:互联网 发布:原油投资网络骗局 编辑:程序博客网 时间:2024/06/04 01:16
public class Solution {    public int wiggleMaxLength(int[] nums) {        if(nums==null||nums.length==0) return 0;        if(nums.length<2) return nums.length;        int[] dp = new int[nums.length];        for(int i=0;i<nums.length;i++){            dp[i] = 1;        }        dp[0] = 1;        if(nums[1]==nums[0]) dp[1] = 1;        else dp[1] = 2;        for(int i=2;i<nums.length;i++){            if((nums[i-1]>nums[i-2]&&nums[i]<nums[i-1])||(nums[i-1]<nums[i-2]&&nums[i]>nums[i-1])){                dp[i] = Math.max(dp[i-1]+1,dp[i]);            }else if((nums[i-1]==nums[i-2])&&(nums[i]==nums[i-1])){                dp[i]=1;            }else{                dp[i]=2;            }        }        int max = Integer.MIN_VALUE;        for(int i=0;i<dp.length;i++){            max = Math.max(max,dp[i]);        }        return max;    }}

以上是自己写的代码,求的是连续的subarray但是题目要求我们去求subsequence可以用贪心算法

public class Solution {    public int wiggleMaxLength(int[] nums) {        int flag = 0;        int count = 1;        for(int i=1;i<nums.length;i++){            if(nums[i]>nums[i-1]){                if(flag==0){                    count++;                    flag = 1;                }else{                    if(flag==-1){                       count++;                       flag = 1;                     }                }            }            else if(nums[i]<nums[i-1]){                if(flag==0){                    count++;                    flag = -1;                }                else{                    if(flag==1){                     count++;                     flag = -1;                     }                }            }        }        return count;    }}
0 0