376. 摆动序列
题目:如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。给定一个整数序列,返回作为摆动序列的最长子序列的长度。
思路:用一个t数组求nums数组相邻两个数的差,则原题的解转换为找出t数组中最多的正负交替的元素的个数
代码:
class Solution {
public int wiggleMaxLength(int[] nums) {
int len = nums.length;
if(len0||len1){
return len;
}
int[] t = new int[len-1];
for(int i=0;i<len-1;i++){
t[i] = nums[i+1] - nums[i];
}
int count=1;
int k=0;
while(k<len-1&&t[k]0){ //不增不减时,以最后一个为起点
k++;
}
if(klen-1){
return 1;
}
if(t[k]>0){
int j = 0;
for(int i=k+1;i<len-1;i++){
if(Math.pow(-1,j+1)t[i]>0){ //利用pow实现正负交替
count++;
j++;
}
}
}
if(t[k]<0){
int j = 1;
for(int i=k+1;i<len-1;i++){
if(Math.pow(-1,j+1)t[i]>0){
count++;
j++;
}
}
}
return count+1;
}
}

浙公网安备 33010602011771号