p156 最长摆动子序列的长度(leetcode 376)

一:解题思路

使用贪心策略去解决这道题目。

Time:O(n),Space:O(1)

二:完整代码示例 (C++版和Java版)

C++:

class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) 
    {
        if (nums.size() == 0) return 0;
        int i = 1;
        int len = 1;
        int n = nums.size();

        while (i < n && nums[i] == nums[i - 1]) i++;

        while (i < n)
        {
            if (nums[i] > nums[i - 1]) len++;
            while (i < n && nums[i]>=nums[i - 1]) i++;
            if (i < n) len++;
            while (i < n && nums[i] <= nums[i - 1]) i++;
        }

        return len;
    }
};

Java:

class Solution {
        public int wiggleMaxLength(int[] nums) 
        {
               if(nums==null || nums.length==0) return 0;
               int i=1;
               int len=1;
               int n=nums.length;
               while(i<n && nums[i]==nums[i-1]) i++;
               
               while(i<n)
               {
                   if(nums[i]>nums[i-1]) len++;
                   while(i<n && nums[i]>=nums[i-1]) i++;
                   if(i<n) len++;
                   while (i<n && nums[i]<=nums[i-1]) i++;
               }
               
               return len;
        }
    }

 

posted @ 2020-05-15 11:35  repinkply  阅读(246)  评论(0)    收藏  举报