leetcode 376 摆动序列

深藏阁楼爱情的钟 2022-09-14 09:48 241阅读 0赞

前言

题目:376. 摆动序列

参考题解:摆动序列-代码随想录


提交代码

这道题目,我没想出来。看了参考题解,才明白。

摆动序列,等价于,序列的拐点。

在这里插入图片描述

  1. #include <vector>
  2. #include <iostream>
  3. using namespace std;
  4. class Solution {
  5. public:
  6. int wiggleMaxLength(vector<int>& nums) {
  7. // 统计拐点个数(包含两边端点)
  8. int result = 0;
  9. int preDiff = 0;
  10. int curDiff = 0;
  11. for(int i=0; i<nums.size()-1; i++){
  12. curDiff = nums[i+1] - nums[i];
  13. // if(preDiff & curDiff < 0){
  14. if((preDiff<=0 && curDiff>0) || (preDiff>=0 && curDiff<0)){
  15. result++;
  16. preDiff = curDiff;
  17. }
  18. }
  19. result++; // 最后一个默认是拐点
  20. return result;
  21. }
  22. void subscriptWiggleMaxLength(vector<int>& nums, vector<int>& subscript){
  23. // 记录拐点下标
  24. int preDiff = 0;
  25. int curDiff = 0;
  26. for(int i=0; i<nums.size()-1; i++){
  27. curDiff = nums[i+1] - nums[i];
  28. if((preDiff<=0 && curDiff>0) || (preDiff>=0 && curDiff<0)){
  29. subscript.push_back(i);
  30. preDiff = curDiff;
  31. }
  32. }
  33. subscript.push_back(nums.size()-1);
  34. }
  35. };
  36. int main(void){
  37. vector<int> nums = {1,17,5,10,13,15,10,5,16,8};
  38. Solution s;
  39. int wiggle_max_length = s.wiggleMaxLength(nums);
  40. vector<int> subscript;
  41. s.subscriptWiggleMaxLength(nums,subscript);
  42. cout<<"wiggle max length:"<<wiggle_max_length<<endl;
  43. cout<<"wiggle max length element:";
  44. for(auto i : subscript){
  45. cout<<nums[i]<<" ";
  46. }
  47. cout<<endl;
  48. }

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读

    相关 贪心算法-leetcode376.摆动序列

    问题描述 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列。第一个差(如果存在的话)可能是正数或负数。少于两个元素的序列也是摆动序列。 例如, \

    相关 贪心——376. 摆动序列

    1 题目描述 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也

    相关 LeetCode 376. 摆动序列

    解题思路 时间复杂度并不理想,没有想到使用波峰,波谷的o(n)算法。 这个dp也还勉强可以通过。 思路就是先计算出差值,然后对差值数组进行dp即可。 代码