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

代码随想录算法训练营第四十二天| 42. 接雨水、84.柱状图中最大的矩形

写代码的第四十二天
最后一天单调栈啊啊啊啊啊啊啊啊

42. 接雨水

思路

本题需要找到当前这个位置左侧的最大值和右侧的最大值,在这两个最大值选最小的那个然后减去当前位置的值,这个值代表高度,那么深度是之前高度所代表的下标进行相减,用高乘深度,每个点的这些值加起来就得到最后的最大容量。
正确代码

class Solution:def trap(self, height: List[int]) -> int:result = 0stack = [0]for i in range(len(height)):if height[i] < height[stack[-1]]:stack.append(i)elif height[i] == height[stack[-1]]:stack.pop()stack.append(i)else:while len(stack) != 0 and height[i] > height[stack[-1]]:mid = height[stack[-1]]stack.pop()if not stack:breakright_height = height[i]left_height = height[stack[-1]]h = min(right_height,left_height) - midw = i - stack[-1] - 1result += h * wstack.append(i)return result

84.柱状图中最大的矩形

思路

本题和上一题差不多,只是这个题要找每个柱子左右侧的第一个高度值小于该柱子的柱子。每插入一个新的小数值时,都要弹出先前的大数值,所以这里和上一题是相反的。栈顶,栈顶的下一个元素,即将入栈的元素:这三个元素组成了最大面积的高度和宽度。需要注意的是本题的柱子在最开始的那位和最后面的那位也是可以用的,上一题是不能用的,所以在上一题的基础上做一些修改即可。

# 单调栈
class Solution:def largestRectangleArea(self, heights: List[int]) -> int:heights.insert(0, 0)heights.append(0)stack = [0]result = 0for i in range(len(heights)):if heights[i] > heights[stack[-1]]:stack.append(i)elif heights[i] == heights[stack[-1]]:stack.pop()stack.append(i)else:while stack and heights[i] < heights[stack[-1]]:mid_index = stack[-1]stack.pop()if stack:left_index = stack[-1]right_index = iwidth = right_index - left_index - 1height = heights[mid_index]result = max(result, width * height)stack.append(i)return result

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MATLAB遗传算法求带自提点的时间窗同时取送货车辆调度路径规划(VRPSPDTW)实例代码
  • ant design pro 中用户的表单如何控制多个角色
  • 大数据应用整理
  • IDEA:如何在idea中设置自动导包
  • 17、springboot3 vue3开发平台-前端-主页面布局搭建
  • 使用 prerenderRoutes 进行预渲染路由
  • 设计模式实战:旅行预订系统的设计与实现
  • Java 操作 Redis和redis持久化
  • C++图笔记(二)最短路
  • 【速通C语言(纯小白版)】第一部分:准备工作
  • microsoft edge怎么关闭安全搜索
  • 【ubutnu18.04】k8s 部署4: worker节点配置1.31.0和containerd 1.7.20
  • Golang | Leetcode Golang题解之第338题比特位计数
  • 【学习笔记】卫星网络(NTN)的窄带物联网(NB-IoT)/增强型机器类型通信(eMTC)研究 -- 3GPP TR 36.763(四)
  • 如何将CSDN文章导出为pdf文件
  • Google 是如何开发 Web 框架的
  • [LeetCode] Wiggle Sort
  • [nginx文档翻译系列] 控制nginx
  • CentOS 7 修改主机名
  • create-react-app项目添加less配置
  • docker容器内的网络抓包
  • HTML5新特性总结
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • uni-app项目数字滚动
  • Webpack 4 学习01(基础配置)
  • - 概述 - 《设计模式(极简c++版)》
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 入门级的git使用指北
  • 深度学习在携程攻略社区的应用
  • 算法-插入排序
  • 协程
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 7行Python代码的人脸识别
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • ​io --- 处理流的核心工具​
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $().each和$.each的区别
  • (02)Cartographer源码无死角解析-(03) 新数据运行与地图保存、加载地图启动仅定位模式
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (70min)字节暑假实习二面(已挂)
  • (CPU/GPU)粒子继承贴图颜色发射
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • (七)Java对象在Hibernate持久化层的状态
  • (学习总结16)C++模版2
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)linux 命令大全
  • *算法训练(leetcode)第四十五天 | 101. 孤岛的总面积、102. 沉没孤岛、103. 水流问题、104. 建造最大岛屿
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .net mvc 获取url中controller和action
  • .net 调用php,php 调用.net com组件 --
  • .Net 知识杂记