当前位置:首页 > 力扣 > LeetCode 3542题:单调栈优化最小操作次数问题

LeetCode 3542题:单调栈优化最小操作次数问题

5个月前 (08-07)

LeetCode 3542题:单调栈优化最小操作次数问题 单调栈 C++ 贪心策略 力扣题解 第1张

一、题目解读

LeetCode 3527题要求对给定数组进行操作,通过一系列步骤将其调整为特定状态(或满足特定条件)。题目核心在于通过最小操作次数实现目标,通常涉及数组元素顺序调整或状态转换。理解题目约束条件(如元素限制、操作定义)是解题关键。

二、解题思路

采用“单调栈+贪心策略”求解。核心思想是维护一个单调递增,通过入栈/出栈操作确保栈内元素严格递增。每次遍历数组元素时,若当前元素破坏栈单调性,则弹出栈顶元素直至恢复单调;当栈为空或当前元素需新增操作时,计数加一。此策略保证每一步操作均为必要且最优,避免冗余调整。

三、解题步骤

1. 初始化结果res=0,创建单调递增栈stk。

2. 遍历数组nums:

○ 若栈不空且栈顶>当前元素,持续弹出栈顶(消除“逆序”元素)。

○ 若当前元素num≠0且栈空或栈顶<num,执行新增操作(res++)并入栈。

3. 返回最终操作次数res。

步骤关键:通过“逆序弹出”维护单调性,仅当“必要新增”时才计入操作,确保全局最优解。

四、代码与注释

class Solution {
public:
    int minOperations(vector<int>& nums) {
        int res = 0;
        stack<int> stk;

        for (int num : nums) {
            // 维护单调递增栈
            while (!stk.empty() && stk.top() > num) {
                stk.pop();
            }

            // 只有当当前数字不为0且栈为空或栈顶小于当前数字时才需要增加操作次数
            if (num != 0 && (stk.empty() || stk.top() < num)) {
                res++;
                stk.push(num);
            }
        }

        return res;
    }
};

代码注释解析:

● 循环逻辑紧扣“单调性维护”与“新增操作判定”,通过条件分支精准捕捉必要步骤。

● 栈操作与计数逻辑紧密耦合,避免重复或无效调整。

五、总结

本题通过单调栈将复杂操作序列转化为局部最优决策,核心在于识别“必须新增”与“可消除”的两种情况。算法时间复杂度O(n)(单次遍历+栈操作),空间复杂度O(n)(栈最大容量)。掌握此类“栈+贪心”模型可高效解决类似数组调整问题,提升算法设计能力。


原创内容 转载请注明出处

分享给朋友:

相关文章

力扣5:中心扩散法 轻松破解最长回文子串

力扣5:中心扩散法 轻松破解最长回文子串

题目解读:在一个给定的字符串中,我们需要找到最长的回文子串。回文是指正读反读都相同的字符串,如"aba"、"abba"都是回文。这个问题看似简单,但要在字符串中...

洛谷1220题解:动态规划与区间DP优化解法(附代码注释)

洛谷1220题解:动态规划与区间DP优化解法(附代码注释)

一、题目解读洛谷1220题要求计算在n个位置放置灯的情况下,通过关闭连续区间灯并移动至区间端点,使得总耗电量最小。需考虑灯的功率与位置差异,设计高效的算法求解最优策略。二、解题思路1. 动态规划 +...

牛客NC67题解:汉诺塔递归算法与解题步骤

牛客NC67题解:汉诺塔递归算法与解题步骤

一、题目解读牛客NC67题要求解决汉诺塔问题,这是一个经典的递归算法题目。题目给定整数n,代表汉诺塔中的盘子数量,需要输出将n个盘子从起始柱移动到目标柱的所有步骤。汉诺塔问题规则为:每次只能移动一个盘...

洛谷1656题解:基于Tarjan算法求解割边问题(附代码与详细步骤)

洛谷1656题解:基于Tarjan算法求解割边问题(附代码与详细步骤)

一、题目解读洛谷1656题要求在无向图中找出所有割边(即删除后导致图不连通的边)。题目核心在于判断图的连通性,并识别哪些边是“桥”。需理解图论中的连通分量概念,以及如何通过算法高效定位割边。二、解题思...

洛谷P2190题解:铁路售票系统车厢计算(差分数组+前缀和优化)

洛谷P2190题解:铁路售票系统车厢计算(差分数组+前缀和优化)

一、题目解读洛谷P2190题要求解决铁路售票系统中的车厢数量计算问题。题目给定n个车站和m条订票申请,每条申请包含区间[x,y)及乘客数z。需要计算在不超载的情况下(每节车厢最多36人),满足所有乘客...

洛谷2652题解析:同花顺排序问题的动态规划与滑动窗口优化

洛谷2652题解析:同花顺排序问题的动态规划与滑动窗口优化

一、题目解读洛谷2652题要求对一组扑克牌进行排序,目标是找到最少需要调整的次数,使得所有牌形成同花顺。题目中,扑克牌由花色和数字组成,需先按花色排序,再在同花色内按数字排序。核心难点在于如何处理花色...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。