当前位置: 首页 > news >正文

LeetCode 解题思路 35(Hot 100)

在这里插入图片描述

解题思路:

  1. 遍历字符串: 逐个处理字符。
  2. 处理左括号: 遇到左括号时,将其压入栈中。
  3. 处理右括号: 遇到右括号时,检查栈顶是否有对应的左括号:
  • 若栈为空或栈顶元素不匹配,返回false。
  • 否则,弹出栈顶元素。
  1. **​​最终校验:**遍历结束后,若栈为空,则所有括号均正确闭合,返回 true;否则返回 false。

Java代码:

class Solution {
    public boolean isValid(String s) {
        Deque<Character> stack = new LinkedList<>();
        Map<Character, Character> map = new HashMap<>() {{
            put(')','(');
            put(']','[');
            put('}','{');
        }};

        for (char c : s.toCharArray()) {
            if (map.containsKey(c)) {
                if (stack.isEmpty() || stack.pop() != map.get(c))
                    return false;
            } else {
                stack.push(c);
            }
        }

        return stack.isEmpty();
    }
}

复杂度分析:

  • 时间复杂度: O(n),其中 n 是字符串的长度。每个字符被处理一次,所有操作均为常数时间。
  • 空间复杂度: O(n),最坏情况下(如全是左括号),栈的空间复杂度为 O(n)。

在这里插入图片描述

解题思路:

  1. 数据结构: 使用 Deque<int[]>(双端队列)模拟栈,每个元素是一个长度为2的数组 int[]。
  • 数组的第一个元素:存储实际的值 val。
  • 数组的第二个元素:存储当前栈的最小值。
  1. 关键逻辑: 每次 push 新值时,​​动态记录当前最小值​​,确保每个节点独立保存其插入时的最小值状态。

Java代码:

class MinStack {
    private Deque<int[]> stack;

    public MinStack() {
        stack = new LinkedList<>();
    }
    
    public void push(int val) {
        stack.push(new int[]{val, Math.min(val, getMin())});
    }
    
    public void pop() {
        stack.pop();
    }
    
    public int top() {
        return stack.peek()[0];
    }
    
    public int getMin() {
        return stack.isEmpty() ? Integer.MAX_VALUE : stack.peek()[1];
    }
}

复杂度分析:

  • 时间复杂度: O(1)。​​
  • 空间复杂度: O(n)​​。
http://www.dtcms.com/a/121712.html

相关文章:

  • 如何理解KMP算法中的next数组
  • 气象水文耦合模式 WRF-Hydro 建模技术与案例实践应用
  • [leetcode]差分算法
  • FPGA_DDR错误总结
  • Spring Boot 应用中如何避免常见的 SQL 性能问题
  • C++学习之套接字并发服务器
  • 砍树(二分)
  • 搜广推校招面经七十一
  • 示波器直流耦合与交流耦合:何时使用哪种?
  • Spring Boot 中集成 Knife4j:解决文件上传不显示文件域的问题
  • [漏洞篇]SSRF漏洞详解
  • 华为网路设备学习-17
  • 即时通讯软件BeeWorks,企业如何实现细粒度的权限控制?
  • PostgreSQL-数据库的索引 pg_operator_oid_index 损坏
  • JAVAWeb_Servlet:前置准备与理论简易介绍
  • input_ids ,attention_mask 是什么
  • js解除禁止复制、禁止鼠标右键效果
  • 阿里发布实时数字人项目OmniTalker,实时驱动技术再突破~
  • json 转 txt 用于 yolo 训练(可适用多边形标注框_python)
  • HOW - React Developer Tools 调试器
  • SpringBoot和微服务学习记录Day1
  • 决策树+泰坦尼克号生存案例
  • 强化学习原理一
  • 本地部署 opik
  • 卡码网54.替换数字
  • 紫光展锐5G SoC T8300:影像升级,「定格」美好世界
  • 用户画像(https://github.com/memodb-io/memobase)应用
  • 神经网络 - 关于简单的激活函数的思考总结
  • Java-对比两组对象找出发生变化的字段工具-支持枚举映射-支持时间-支持显示对应字段中文描述-嵌套list等场景
  • 淘宝API接口:淘宝API接口概述以及对开发者的具体帮助