首页 > 其他分享 >Leetcode 热题100 - 155 最小栈

Leetcode 热题100 - 155 最小栈

时间:2024-08-11 18:27:51浏览次数:20  
标签:std 155 元素 stk second pair 100 Leetcode first

Leetcode 热题100-155 最小栈

1. 题目描述

155 最小栈

2. 解题思路

方法一:创建一个辅助栈min_stk用以存储当前元素相对应的栈中最小元素值;
方式二:类似于方法一,使用pair<int,int>同时存储当前元素与其对应的栈中最小元素值。

3. 代码实现(方法二)

class MinStack {
    // 存储与每个元素以及相对应的栈中的最小值
    stack<pair<int,int>> stk;
public:
    MinStack() {
        // 初始化堆栈对象
        stk.push({INT_MAX, INT_MAX});
    }

    void push(int val) { stk.push({val, min(val, stk.top().second)}); }

    void pop() { stk.pop(); }

    int top() { return stk.top().first; }

    int getMin() { return stk.top().second; }
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

4. c++知识点

std::pair 是一个简单的容器类模板,用于存储两个相关联的对象。它的主要用途是将两个值组合在一起,形成一个单独的实体。以下是 std::pair 的主要用法:

用法

  1. 创建和初始化:
    • 可以直接创建并初始化一个 std::pair 对象。
    • 可以使用 std::make_pair 函数来创建一个 std::pair 对象。
  std::pair<int, std::string> p1(1, "example");
  auto p2 = std::make_pair(2, "example2");
  1. 访问元素与修改元素:
    • 通过成员变量 firstsecond 来访问 std::pair 的两个元素。
    • 可以直接修改 firstsecond 的值。
  int num = p1.first;     // 访问第一个元素
  std::string str = p1.second; // 访问第二个元素

  p1.first = 10;          // 修改第一个元素
  p1.second = "ten";      // 修改第二个元素
  1. 比较:
    • std::pair 支持按字典顺序进行比较(先比较 first 元素,如果 first 相等,再比较 second 元素)。
    • 提供了 ==, !=, <, <=, >, >= 等比较操作符。
if (p1 < p2) {
    // 按字典顺序比较
}
  1. 使用场景:
    • 返回多个值:函数返回一对相关的值时,可以使用 std::pair
    • 容器中的元素:在 std::mapstd::unordered_map 等关联容器中,键值对存储为 std::pair
    • 暂时组合两个值:在算法中临时组合两个相关的值。

标签:std,155,元素,stk,second,pair,100,Leetcode,first
From: https://blog.csdn.net/qewa132/article/details/140960231

相关文章

  • Leetcode-3129 找出所有稳定的二进制数组I
    Leetcode-3129找出所有稳定的二进制数组I1.题目描述2.解题思路3.代码实现1.题目描述3129找出所有稳定的二进制数组I2.解题思路(1)定义f[i][j][k]表示i个0、j个1且当前位i+j填写值为k=0/1的所有情况;(2)对于f[i][0][0]、f[0][j][1]初始化为1,注意到:......
  • Leetcode-3132 找出与数组相加的整数II
    Leetcode-3132找出与数组相加的整数II1.题目描述2.解题思路3.代码实现1.题目描述3132找出与数组相加的整数II2.解题思路(1)排序后,注意到nums1数组比nums2数组多两个元素,可推出最小匹配元素一定在nums[0]、nums[1]、nums[2]中出现;(2)优先从nums[2]进行判......
  • 「LeetCode Top100」之滑动窗口
    3.无重复字符的最长子串题目链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/description/?envType=study-plan-v2&envId=top-100-liked题目难度:中等标签:哈希表、字符串、滑动窗口题目状态:学习题解思路:滑动窗口的思路,也就是维持一个无......
  • Cisco Firepower 4100 Series FTD Software 7.4.2 & ASA Software 9.20.3 发布下载 -
    CiscoFirepower4100SeriesFTDSoftware7.4.2&ASASoftware9.20.3发布下载-思科防火墙系统软件FirepowerThreatDefense(FTD)Software请访问原文链接:https://sysin.org/blog/cisco-firepower-4100/,查看最新版。原创作品,转载请保留出处。为什么选择CiscoSecure......
  • Cisco Firepower 2100 Series FTD Software 7.4.2 & ASA Software 9.20.3 发布下载 -
    CiscoFirepower2100SeriesFTDSoftware7.4.2&ASASoftware9.20.3发布下载-思科防火墙系统软件FirepowerThreatDefense(FTD)Software请访问原文链接:https://sysin.org/blog/cisco-firepower-2100/,查看最新版。原创作品,转载请保留出处。为什么选择CiscoSecure......
  • LeetCode 算法:最小栈 c++
    原题链接......
  • 「LeetCode Top100」之双指针
    283.移动零题目链接:https://leetcode.cn/problems/move-zeroes/description/?envType=study-plan-v2&envId=top-100-liked题目难度:简单标签:数组、双指针题目状态:AC思路:两个指针,i用来找0,j用来找非0。当nums[i]==0&&nums[j]!=0时,将两者交换。代码:classSolutio......
  • Leetcode 206. 反转链表
    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。示例1:输入:head=[1,2,3,4,5]输出:[5,4,3,2,1]示例2:输入:head=[1,2]输出:[2,1]示例3:输入:head=[]输出:[]提示: 链表中节点的数目范围是 [0,5000]-5000<=Node.val<=5000方法一: //双指......
  • LeetCode | 20 ValidParentheses
    分析括号成对出现,键值对类型括号字符序列嵌套出现,不能错位,顺序具有对称性为什么不用数组这种数据结构来记录数量?因为这种方法不能保证括号的正确顺序。例如,字符串'({[)}]'会被认为是有效的。栈解决有效括号问题当遇到一个左括号时,我们需要记住它,以便在后续遇到相应的右括......
  • LeetCode | 225 Implement Stack Using Queues
    分析阻塞(Blocking)阻塞操作指的是在调用一个函数或方法时,如果该操作不能立即完成(例如,因为需要等待某个事件的发生,如数据达到或资源可用),那么当前线程或进程会被挂起(暂停执行),直到操作完成为止。在这个等待期间,线程或进程无法执行其他任务。等待:调用方必须等待操作完成独......