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

LeetCode hot 100 解题思路记录(三)

前情提要

本文是个人学习的粗糙笔记,仅记录思路和图解(跳过了困难题,等之后再弄)

视频看的是油管上的neetcode

有效的括号(简单)

后进先出:左括号入栈,有对应右括号则出栈

代码主要步骤:遍历字符串,若是左括号则压入栈,若是右括号检查是否匹配

         if (pairs.containsKey(ch)) { // 如果当前字符是右括号// 检查栈是否为空,或者栈顶元素是否不匹配if (stack.isEmpty() || stack.peek() != pairs.get(ch)) {return false;  // 不匹配,直接返回false}stack.pop();// 匹配成功,弹出栈顶的左括号} else {stack.push(ch);// 当前字符是左括号,压入栈中}

最小栈

加了一个辅助的最小值栈,栈是先进后出

push()

xStack.push(x);  // 将值压入主栈
// 将当前值与辅助栈顶的最小值比较,压入更小的那个
// 这样辅助栈每个位置都记录着主栈对应位置及以下的最小值
minStack.push(Math.min(minStack.peek(), x));

pop()

xStack.pop();    // 弹出主栈顶部的值
minStack.pop();  // 同时弹出辅助栈顶部的值(保持两个栈同步)

top(): peek()

getMin(): peek()

字符串解码

3[a2[c]]

步骤  栈状态          操作
1    [3]            遇到数字3
2    [3, [, a]      遇到[和a
3    [3, [, a, 2]   遇到数字2  
4    [3, [, a, 2, [, c] 遇到[和c
5    [3, [, a, "cc"] 遇到],解码2[c]得到"cc"
6    ["acc"]         遇到],解码a+"cc"得到"acc"
7    ["accccaccccacccc"] 解码3["acc"]得到最终结果

使用栈来处理括号嵌套结构

三种情况处理:  数字:提取完整数字压栈

                           字母或左括号:直接压栈

                           右括号:开始解码过程

解码过程:stk链表弹出直到左括号,获取要重复的字符串,创建临时链表sub来存储要重复字符串

                  stk弹出左括号

                  stk弹出重复次数

                  sub反转后构建重复后的字符串并压回栈中

每日温度


代码中的stack存储的不是具体的温度值,而是temprature数组里的具体索引

柱状图中最大的矩形(困难)

数组中的第K个最大元素

QuickSelect,最大堆能保证堆顶数字是最大值,每次堆大小减一即可找到第K个最大元素

 算法流程:先构建最大堆

                   然后进行k-1次操作: 将堆顶最大值交换到数组末尾、堆大小减1、重新调整堆

                   最后堆顶就是第k大的元素

    // 调整最大堆:确保以i为根的子树满足最大堆性质public void maxHeapify(int[] a, int i, int heapSize) {int l = i * 2 + 1;      // 左子节点索引int r = i * 2 + 2;      // 右子节点索引int largest = i;         // 假设当前节点是最大的// 如果左子节点存在且大于当前节点if (l < heapSize && a[l] > a[largest]) {largest = l;} // 如果右子节点存在且大于当前最大值if (r < heapSize && a[r] > a[largest]) {largest = r;}// 如果最大值不是当前节点,需要交换并继续调整if (largest != i) {swap(a, i, largest);          // 交换当前节点和最大值节点maxHeapify(a, largest, heapSize);  // 递归调整受影响的子树}}

前K个高频元素

使用的数据结构:  HashMap:用于统计每个数字的出现频率

                               最小堆(PriorityQueue):维护前k个高频元素

示例详细过程如下

数字: [1,1,1,2,2,3,3,4,4,4,4], k=2

步骤一,频率统计: {1:3, 2:2, 3:2, 4:4}

步骤二,构建最小堆,容量为2

步骤三,堆操作:  加入[1,3] -> 堆: [[1,3]]
                            加入[2,2] -> 堆: [[2,2], [1,3]](堆顶[2,2])
                            加入[3,2]: 2=2,不替换 -> 堆不变
                            加入[4,4]: 4>2,替换 -> 堆: [[1,3], [4,

http://www.dtcms.com/a/390775.html

相关文章:

  • 小程序移动端设计UI(二)酒店自助入住小程序—东方仙盟练气期
  • 解决pnpm中的 Pinia 版本冲突:Cannot read properties of undefined (reading ‘_s‘)
  • 说一说大模型后训练的流程
  • 【微实验】激光测径系列(三)
  • Vim 使用从入门到精通
  • 快速实现 Excel 表格转 SVG:Java 教程
  • [极客大挑战 2019]LoveSQL
  • Excel和WPS表格中选中全部空单元格并输入相同内容
  • 日志易制造业安全UEBA解决方案
  • Java 将 HTML 转换为 Excel:实用指南
  • MySQL索引篇---数据结构的选择
  • 【STM32 CubeMX + Keil】 中断、NVIC 、EXTI
  • BIGO一面面试总结
  • Ansible-fetch模块
  • DevExpress WPF中文教程:DataGrid - 服务器数据和大型数据源
  • Vue项目不同页面显示不同的title
  • NW820NW825美光固态闪存NW829NW832
  • aosp13/14/15/16如何实现窗口局部区域高斯模糊毛玻璃效果及Winscope原生重大bug发现
  • Java微服务架构设计模式精解
  • 设计模式面试之单例模式常问知识点
  • 深入解析 MySQL 元数据锁 (MDL) 与 SHOW PROCESSLIST 实战
  • 能不能写一个可以在linux使用的类nano编辑器
  • Rocky10 使用kubeadm部署K8s v1.34 一主两从
  • 深入理解Buffer:数据世界的“蓄水池“
  • 通义万相开源 Wan2.2-S2V-14B,实现图片+音频生成电影级数字人视频
  • windows c++环境 使用VScdoe配置opencv
  • JVM(四)-- 对象的实例化内存布局和直接内存
  • G1垃圾回收器的优势
  • 内存分配策略
  • Python采集Tik Tok视频详情,Tik TokAPI接口(json数据返回)