Advertisement

Leetcode 376. 摆动序列 解法与代码实现

阅读量:

解题思路:

采用贪心算法的核心理念。

以示例 [1,17,5,10,13,15,10,5,16,8] 为例,其中初始的两个子序列 [1, 17] 和 [17, 5] 均被直接选取,无任何问题。对于后续出现的 [5, 10, 13, 15] 这一子序列,由于其数值呈现持续上升趋势,依据贪心策略选择差值最大的两个元素,即 [5, 15],并排除掉中间的数字 10 和 13。接着在后续的 [15, 10, 5] 子序列中,同样按照这一原则选择 [15, 5]。通过一次完整的遍历过程,最终通过贪心策略所获得的子序列即为最优解对应的序列。

程序中所设置的大循环用于依次遍历 nums 容器(数组)。在每次执行循环体时,都会进行一次比较操作,并判断上一次所计算出的差值是否呈现相反的趋势。若结果为相反,则将结果值加一,并对 flag 变量进行相应的赋值操作。

复制代码
 class Solution {

    
 public:
    
     int wiggleMaxLength(vector<int>& nums) {
    
     if(nums.empty()) return 0;
    
     
    
     int res = 1;
    
     int i = 0;
    
     int flag = 0; //用于标记前一个差值的正负

全部评论 (0)

还没有任何评论哟~