LeetCode刷题笔记-数据结构-day14

Posted LL.LEBRON

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode刷题笔记-数据结构-day14相关的知识,希望对你有一定的参考价值。

文章目录

LeetCode刷题笔记-数据结构-day14

155. 最小栈

1.题目描述

原题链接:155. 最小栈

2.解题思路

题目要求在常数时间内检索到最小元素。

我们这里使用两个栈:一个是基本的栈,一个是维护最小值的单调栈。

基本操作:

  1. 当我们向栈中压入一个数时,如果该数 单调栈的栈顶元素或者单调栈为空,则将该数同时压入单调栈中;否则,不压入
  2. 当我们从基本栈弹出一个数时,判断该数是否等于单调栈栈顶元素,如果是也将单调栈栈顶元素弹出
  3. 每次获取最小元素就是单调栈的栈顶元素

3.代码

class MinStack 
public:
    stack<int> res,st;
    MinStack() 

    
    
    void push(int val) 
        res.push(val);
        if(!st.size()||st.top()>=val) st.push(val);
    
    
    void pop() 
        if(st.size()&&res.top()==st.top()) st.pop();
        res.pop();
    
    
    int top() 
        return res.top();
    
    
    int getMin() 
        return st.top();
    
;

1249. 移除无效的括号

1.题目描述

原题链接:1249. 移除无效的括号

2.解题思路

用一个栈存入(的位置,用一个bool数组标记哪些位置的括号是无效的。

从左遍历字符串:

  1. 如果是(则将其标记为true,并将其下标加入栈
  2. 如果是),检查栈中有木有(
    1. 如果有说明当前两个括号匹配,将栈顶的(的标记改为false,并且出栈。
    2. 如果栈为空,也就是不存在(与当前)匹配,标记)当前下标为true
  3. 最后遍历数组,只累加标记为false的字符

3.代码

class Solution 
public:
    string minRemoveToMakeValid(string s) 
        int n=s.size();
        stack<int> st;
        vector<bool>  f(n+1,false);
        for(int i=0;i<n;i++)
            if(s[i]=='(')
                st.push(i);
                f[i]=true;
            else if(s[i]==')')
                if(st.size())
                    int t=st.top();
                    st.pop();
                    f[t]=false;
                else
                    f[i]=true;
                
            
        
        string res="";
        for(int i=0;i<n;i++)
            if(!f[i]) res+=s[i];
        
        return res;
    
;

1823. 找出游戏的获胜者

1.题目描述

原题链接:1823. 找出游戏的获胜者

2.解题思路

用队列模拟即可。

每次队头出k-1个元素从队尾入,第k个元素直接出队,模拟n-1次,最后留在队列的元素就是获胜者。

3.代码

class Solution 
public:
    int findTheWinner(int n, int k) 
        queue<int> q;
        for(int i=1;i<=n;i++) q.push(i);
        for(int i=1;i<n;i++)
            for(int j=1;j<k;j++)
                int t=q.front();
                q.pop();
                q.push(t);
            
            q.pop();
        
        return q.front();
    
;

以上是关于LeetCode刷题笔记-数据结构-day14的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode刷题笔记-数据结构-day19

LeetCode刷题笔记-数据结构-day20

LeetCode刷题笔记-数据结构-day16

LeetCode刷题笔记-数据结构-day5

LeetCode刷题笔记-数据结构-day9

LeetCode刷题笔记-数据结构-day19