方法一:
时间复杂度:O(n2)
空间复杂度:O(n)
up[i] 存的是目前为止最长的以第 ii 个元素结尾的上升摆动序列的长度。 down[i] 记录的是目前为止最长的以第 ii 个元素结尾的下降摆动序列的长度。
class Solution {
public int wiggleMaxLength(int[] nums) {
if(nums==null) {
return 0;
}
int len=nums.length;
if(len<2) {
return len;
}
int[] up=new int[len];
int[] down=new int[len];
for(int i=1;i<len;i++) {
for(int j=0;j<i;j++) {
if(nums[i]>nums[j]) {
up[i]=Math.max(up[i], down[j]+1);
}else if(nums[i]<nums[j]) {
down[i]=Math.max(down[i], up[j]+1);
}
}
}
return Math.max(up[len-1], down[len-1])+1;
}
}
方法二:
时间复杂度:O(n)
空间复杂度:O(n)
if(nums==null) {
return 0;
}
int len=nums.length;
if(len<2) {
return len;
}
int[] up=new int[len];
int[] down=new int[len];
up[0]=down[0]=1;
for(int i=1;i<len;i++) {
if(nums[i]>nums[i-1]) {
up[i]=down[i-1]+1;
down[i]=down[i-1];
}else if(nums[i]<nums[i-1]) {
down[i]=up[i-1]+1;
up[i]=up[i-1];
}else {
up[i]=up[i-1];
down[i]=down[i-1];
}
}
return Math.max(up[len-1], down[len-1]);
方法三:
时间复杂度:O(n)
空间复杂度:O(n)
class Solution {
public int wiggleMaxLength(int[] nums) {
if(nums==null) {
return 0;
}
int len=nums.length;
if(len<2) {
return len;
}
int up=1,down=1;
for(int i=1;i<len;i++) {
if(nums[i]>nums[i-1]) {
up=down+1;
}else if(nums[i]<nums[i-1]) {
down=up+1;
}
}
return Math.max(up, down);
}
}