376. Wiggle Subsequence

来源:互联网 发布:2016国产网络剧排行榜 编辑:程序博客网 时间:2024/06/05 05:08

本题是找出一个序列中的最长的摆动子序列

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: 6The entire sequence is a wiggle sequence.Input: [1,17,5,10,13,15,10,5,16,8]Output: 7There 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;        }}

原创粉丝点击