本题是找出一个序列中的最长的摆动子序列
For example, [1,7,4,9,2,5]
is a wiggle sequence because the differences (6,-3,5,-7,3) are alternately positive and negative. In contrast, [1,4,7,2,5]
and [1,7,4,5,5]
are not wiggle sequences, the first because its first two differences are positive and the second because its last difference is zero.
Input: [1,7,4,9,2,5] Output: 6 The entire sequence is a wiggle sequence. Input: [1,17,5,10,13,15,10,5,16,8] Output: 7 There are several subsequences that achieve this length. One is [1,17,10,13,10,16,8]. Input: [1,2,3,4,5,6,7,8,9] Output: 2我们的思路是首先找出不重复的序列开头,然后维护一个正负值的b,每当b的值和前一个相邻数值对比的值不同,我们就改变b的正负值并将result结果
加1,最后返回result.代码如下:
class Solution {
public int wiggleMaxLength(int[] nums) {
if(nums.length==1||nums.length==0){
return nums.length;
}
int k =0 ;
while(k<nums.length-1&&nums[k]==nums[k+1]){
k++;
}
if(k==nums.length-1)
return 1;
boolean b = nums[k]>nums[k+1];
int result = 2;
for (int i = k+1; i < nums.length-1; i++) {
if(nums[i]>nums[i+1]&&!b||nums[i]<nums[i+1]&&b){
result++;
b = !b;
}
}
return result;
}
}