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;
}
}