leetcode376.摆动序列(中等)

leetcode376.摆动序列(中等),第1张




思路:flag的正负来表示上一次的状态,当“峰”遇到下降时ans++,当“谷”遇到上升时ans++。


class Solution {
public:
    int wiggleMaxLength(vector<int>& nums) {
       
        int n = nums.size();
        if (n < 2) return n;
        int flag = nums[1] - nums[0],  ans = (nums[1] - nums[0]) ? 2 : 1; 
        for (int i = 1; i < n; ++i) {
            int diff = nums[i] - nums[i - 1];
            if((diff > 0 && flag <= 0) || (diff < 0 && flag >= 0)) { //
                flag = diff;
                ans++;
            }
        }
        return ans;
    }
};

注意(简化代码)
1:ans的初始值:如果 nums[1] - nums[0]为0时,表示此时只有一个数字ans为1,否则不管是“峰”还是“谷”,ans都是2
2:flag标志的问题:为什么不用-1和1来区别?因为可能有平的一段(用0来表示),比如一开始的时候,需要将0和(1 -1)分开讨论,所以会更麻烦一点,用正负的话。


在判断是否出现“峰”或者“谷”的时候判断条件加上 “=”就不用把“平”单独考虑了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/565106.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-06
下一篇 2022-04-06

发表评论

登录后才能评论

评论列表(0条)

保存