首页 > 其他分享 >Leetcode 11 -- 贪心

Leetcode 11 -- 贪心

时间:2022-10-10 19:24:38浏览次数:73  
标签:11 cnt ch 出栈 -- 元素 st minx Leetcode

题目描述

最小字典许

思路

思路来源
由于t中的字符后进先出,可以使用一个暂存栈来保存s删除的第一个字符
入栈很简单,初始状态下,栈为空,我们可以直接入栈,因此,每次遍历我们都是先把元素放入栈中,然后判断是否能出栈
问题是什么时候让元素出栈
贪心的想,如果一个元素要出栈,那么s中剩下的元素不能存在比当前栈顶元素更小的元素
那么问题就变成了如何判断s中是否存在比当前元素更小的元素呢?
最好的办法就是使用一个额外数组来记录每个元素的个数,然后遍历s的时候动态维护

代码

class Solution {
public:
    string robotWithString(string s) {
        // 由于t中的字符后进先出,可以使用一个暂存栈来保存s删除的第一个字符
        // 入栈很简单,问题是什么时候让元素出栈
        // 贪心的想,如果一个元素要出栈,那么s中剩下的元素不能存在比当前栈顶元素更小的元素
        // 那么问题就变成了如何判断s中是否存在比当前元素更小的元素呢?
        // 最好的办法就是使用一个额外数组来记录每个元素的个数,然后遍历s的时候动态维护
        
        stack<char> st;
        int cnt[26];
        int minx = 0; // 剩余的最小字母
        int n = s.length();
        string res = "";
        
        // 计算每个字母的数量
        memset(cnt, 0, sizeof cnt);
        for(auto &ch : s)   ++ cnt[ch - 'a'];
        
        // 遍历s
        for(auto &ch : s)
        {
            -- cnt[ch - 'a']; // 先维护
            while(minx < 26 && cnt[minx] == 0)     ++ minx; // 找到最小元素
            st.push(ch);
            while(!st.empty() && st.top() - 'a' <= minx)
            {
                res += st.top();
                st.pop();
            }
        }
        return res;
    }
};

标签:11,cnt,ch,出栈,--,元素,st,minx,Leetcode
From: https://www.cnblogs.com/ALaterStart/p/16776856.html

相关文章

  • LC 856. 括号的分数
    1.问题描述给定一个平衡括号字符串 S,按下述规则计算该字符串的分数:()得1分。AB得 A+B 分,其中A和B是平衡括号字符串。(A)得 2*A 分,其中A是平衡括......
  • Java基础语法 DoWhile循环
    DoWhilepackageBasicGrammar.day05;/*do-while循环的使用一、循环结构的4个要素①初始化条件②循环条件--->是boolean类型③循环体④迭代条件二、do-whi......
  • 计算机图形学的定义和发展
    一计算机图形学的定义1.计算机图形学是一门研究如何利用计算机表示,生成,处理和显示图形的学科。2.主要包含四大部分:建模,渲染,动画和人机交互。最主要的则是建模技术和渲染......
  • 【luogu CF1553F】Pairwise Modulo(树状数组)(根号分治)
    PairwiseModulo题目链接:luoguCF1553F题目大意给你一个序列,对于每个前缀,要你求两两互相取模的结果的和。思路考虑新加入一个数增加的答案。那就是加两个部分:\(\sum......
  • MATLAB 对角线的提取和交换
    已知A矩阵为: 4  20 12 8 3  15  7 40 8  22 12 36 11 30 18 46 通过矩阵提取,获得:8   0   0  40   7 ......
  • Linux的引导和服务
    一、linux的引导过程1.1、开机自检服务器主机开机后,根据主板BIOS的设置对cpu、内存、显卡等设备进行基础检测,检测成功后根据预设的启动程序移交系统控制权,大多时候会移交......
  • MATLAB 对称矩阵
    已知A矩阵为: 4  20 12 8 3  15  7 40 8  22 12 36 11 30 18 46 将矩阵转变为对称矩阵 4 20 12  820 15  7 ......
  • .net6 api添加接口注释
    参照:.NET6Swagger添加xml注释-凡尘一叶~-博客园(cnblogs.com)【这个比较准】.netcore的Swagger接口文档使用教程(一):Swashbuckle-没有星星的夏季-博客园(cnbl......
  • 日志服务管理
    一、日志介绍1、日志文件linux的日志文件可以说是最有用的了,日志文件可以让我们了解系统所处的状态,比如能查出哪些用户有登入,这也涉及相关的安全问题。如果我们不懂得分......
  • 求该矩阵的逆、行列式、秩、迹
    已知A矩阵为: 4  20 12 8 3  15  7 40 8  22 12 36 11 30 18 46 求该矩阵的逆、行列式、秩、迹  a=[4,20,12,8;3,15,7,40......