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

【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84

【代码随想录训练营】【Day 63】【单调栈-2】| Leetcode 42, 84

需强化知识点

  • 单调栈强化

题目

42. 接雨水

  • 注意 python 数组反序用法 result [::-1]
class Solution:def trap(self, height: List[int]) -> int:# n = len(height)# leftMax, rightMax = [0] * n, [0] * n# result = 0# leftMax[0] = height[0]# for i in range(1, n):#     leftMax[i] = max(leftMax[i-1], height[i])# rightMax[n-1] = height[n-1]# for i in range(n-2, 0, -1):#     rightMax[i] = max(rightMax[i+1], height[i])# for i in range(1, n):#     sum_i = min(leftMax[i], rightMax[i])- height[i]#     result += sum_i# return result# 递减的,当遇到比栈顶大的,即代表遇到凹槽,弹出计算,还是存 indexstack = [0]result = 0for i in range(1, 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 = height[stack[-1]]stack.pop()if stack:right_height = height[i]left_height = height[stack[-1]]h = min(right_height, left_height) - mid_heightw = i - stack[-1] -1result += h*wstack.append(i)return result

84. 柱状图中最大的矩形

  • 双指针:记录左右侧第一个小于当前高度的下标(超时),最左侧和最右侧的处理也不同
  • 单调栈:注意要在首尾加入0,0,因为不同于接雨水,可以单独成一个矩形
class Solution:def largestRectangleArea(self, heights: List[int]) -> int:# n = len(heights)# # 左右侧第一个小于当前高度的下标# left_min, right_min = [0] * n, [0] * n# result = 0# left_min[0] = -1# for i in range(1, n):#     j = i - 1#     while j >= 0 and heights[j] >= heights[i]:#         j -= 1#     left_min[i] = j# right_min[n-1] = n# for i in range(n-2, -1, -1):#     j = i + 1#     while j < n and heights[j] >= heights[i]:#         j += 1#     right_min[i] = j# for i in range(0, len(heights)):#     tmp = heights[i] * (right_min[i] - left_min[i] - 1)#     result = max(tmp, result)# return resultheights.insert(0, 0)heights.append(0)n = len(heights)# 递增,存下标stack = [0]result = 0for i in range(1, n):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 - 1result = max(result, width*heights[mid_index])stack.append(i)return result
http://www.lryc.cn/news/390903.html

相关文章:

  • CTF常用sql注入(一)联合注入和宽字节
  • 薄冰英语语法学习--冠词1
  • 基于Java中的SSM框架实现野生动物公益保护系统项目【项目源码+论文说明】计算机毕业设计
  • c->c++(二):class
  • 11 UDP的可靠传输协议QUIC
  • 14-20 Vision Transformer用AI的画笔描绘新世界
  • LVS FILTER UNUSED OPTION
  • Python后端面试题
  • docker打包 arm32v7/debian 问题总结
  • 【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(二十)
  • Vuetify3:监听当前手机还是电脑
  • Zabbix 配置钉钉告警
  • TTL转RS232与USB转TTL
  • 【力扣 896】单调数列 C++题解(循环)
  • 代码随想录Day71(图论Part07)
  • [Mdp] lc 494. 目标和(01背包变种+dp+dfs)
  • React vs Vue:谁是构建现代Web应用的王者?
  • Linux CentOS 宝塔中禁用php8.2的eval函数详细图文教程
  • Matlab 中 fftshift 与 ifftshift
  • 被裁了(9年)
  • 13. Revit API: Filter(过滤器)
  • hadoop 3.X 分布式HA集成Kerbos(保姆级教程)
  • VDS虚拟导播切换台软件
  • UE4_材质_使用彩色半透明阴影
  • arthas监控工具笔记(二)monior等
  • 【mybatis】mybatis-plus中主键生成策略
  • 模型情景制作-如何制作棕榈树
  • # mysql 中文乱码问题分析
  • [小试牛刀-习题练]《计算机组成原理》之指令系统
  • JAVA 实现拍卖框架及拍卖详情流程介绍(包含代码示咧)