C++ 贪心算法 摇摆序列

一个整数序列,如果两个相邻元素的差恰好正负(负正)交替出现,则该序列被称为摇摆序列。一个小于2个元素的序列直接为摇摆序列。

#include<vector>
class Solution
{
public:
 Solution(){}
 ~Solution(){}
 int wiggleMaxLength(std::vector<int>& nums)
 {
  if (nums.size()<2)
  {
   return nums.size();
  }
  static const int BEGIN = 0;
  static const int UP = 1;
  static const int DOWN = 2;
  int STATE = BEGIN;
  int max_length = 1;
  for (unsigned int i = 1; i < nums.size(); i++)
  {
   switch (STATE)
   {
   case BEGIN:
    if (nums[i-1]<nums[i])
    {
     STATE = UP;
     max_length++;
    }
    else if (nums[i-1]>nums[i])
    {
     STATE = DOWN;
     max_length++;
    }
    break;
   case UP:
    if (nums[i - 1] > nums[i])
    {
     STATE = DOWN;
     max_length++;
    }
    break;
   case DOWN:
    if (nums[i-1]<nums[i])
    {
     STATE = UP;
     max_length++;
    }
    break;
   }
  }
  return max_length;
 }
};
int main()
{
 std::vector<int> nums;
  nums.push_back(1);
  nums.push_back(17);
  nums.push_back(5);
  nums.push_back(10);
  nums.push_back(13);
  nums.push_back(15);
  nums.push_back(10);
  nums.push_back(15);
  nums.push_back(16);
  nums.push_back(8);
  Solution solve;
  printf("%d\n", solve.wiggleMaxLength(nums));
  return 0;
}

运行结果:
7

发布了61 篇原创文章 · 获赞 47 · 访问量 1607

猜你喜欢

转载自blog.csdn.net/weixin_44208324/article/details/104561313