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

LeetCode 解题思路 36(Hot 100)

在这里插入图片描述

解题思路:

  1. 数字栈​​: 存储重复次数 num。
  2. 字符串栈​​: 存储当前已解码的字符串 current。
  3. 遍历字符串:
  • 数字​​:累积构建当前重复次数。
  • 左括号 [​​:将当前数字和字符串压栈,重置临时变量。
  • 右括号 ]​​:弹出栈顶的重复次数和之前的字符串,将当前字符串重复 repeat 次后拼接。
  • 字母​​:直接追加到当前字符串。
  1. 返回结果: return String.valueOf(current);

Java代码:

class Solution {
    public String decodeString(String s) {
        Deque<Integer> numStack = new LinkedList<>();
        Deque<StringBuilder> strStack = new LinkedList<>();
        StringBuilder current = new StringBuilder();
        int num = 0;

        for (char c : s.toCharArray()) {
            if (Character.isDigit(c)) {
                num = num * 10 + (c - '0');
            } else if (c == '[') {
                numStack.push(num);
                strStack.push(current);
                current = new StringBuilder();
                num = 0;
            } else if (c == ']') {
                int repeat = numStack.pop();
                StringBuilder temp = current;
                current = strStack.pop();
                current.append(String.valueOf(temp).repeat(repeat));
            } else {
                current.append(c);
            }
        }

        return String.valueOf(current);
    }
}

复杂度分析:

  • 时间复杂度: O(N,其中 N 是解码后字符串的总长度。每个字符最多被处理一次,重复拼接的复杂度由解码后的字符串长度决定。
  • 空间复杂度: O(M),其中 M 是输入字符串的最大嵌套深度。栈的空间消耗与嵌套层数相关。

在这里插入图片描述

解题思路:

  1. ​​初始化​​: 创建结果数组 answer(初始化为全0)和栈 stack(存储索引)。
  2. 遍历温度数组​​: 对于当前温度 temperatures[i],若栈不为空且栈顶索引对应的温度小于当前温度,弹出栈顶索引 index,计算天数差 i - index,存入 answer[index],将当前索引 i 压入栈。
  3. 返回结果​​: 遍历结束后,返回 answer 数组。

Java代码:

class Solution {
    public int[] dailyTemperatures(int[] temperatures) {
        int[] answer = new int[temperatures.length];
        Deque<Integer> stack = new LinkedList<>();

        for (int i = 0; i < temperatures.length; i++) {
            while (!stack.isEmpty() && temperatures[i] > temperatures[stack.peek()]) {
                int index = stack.pop();
                answer[index] = i - index;
            }
            stack.push(i);
        }

        return answer;
    }
}

复杂度分析:

  • 时间复杂度: O(n),其中 n 是数组长度。
  • 空间复杂度: O(n)。最坏情况下栈需要存储所有索引。

相关文章:

  • 自适应LL解析的终极进化:ALL(*)算法如何改写语法解析规则
  • 动态词槽管理系统深度设计
  • YOLO11改进-模块-引入门控瓶颈卷积GBC 关注目标抑制背景干扰
  • OpenEuler运维实战-(OS|硬件信息-软件信息-日志)信息收集!
  • Linux服务器网卡深度解析:从ifconfig输出到生产环境性能调优实战
  • 力扣刷题Day 15:二叉树中的最大路径和(124)
  • [ctfshow web入门] web32
  • 【场景应用1】微调语言模型:从数据加载到模型训练、模型评估
  • VMware Workstation/Player 在 Windows 上的完整安装与使用指南
  • [bug]解决vscode+cline使用mcp服务报错spawn npx enoent spawn npx enoent
  • 7. RabbitMQ 消息队列——延时队列(Spring Boot + 安装message_exchange“延迟插件“ 的详细配置说明)的详细讲解
  • 进程通信的学习
  • 多值字典表设计:优雅处理一对多关系的数据库方案
  • C++基础精讲-01
  • Ubuntu环境下,EDK2+EmulatorPkg编译运行UEFI固件
  • Ollama教程与大模型本地部署指南
  • 32 python json
  • PostgreSQLs数据库考试
  • MySQL 中的聚簇索引和非聚簇索引有什么区别?
  • Redis的过期和内存淘汰策略
  • 高端企业网站建设好的公司/整合营销公司排名
  • wordpress 站内链接/互联网营销师报名官网
  • 适合0基础网站开发软件/商品标题优化
  • 做电商网站价钱/网站设计论文
  • 游戏开服网/seo简介
  • 做网站技术服务合同/网络营销员岗位的职责与要求