代码随想录算法训练营第五十九天

news2024/11/21 6:36:52

代码随想录算法训练营第五十九天| 503.下一个更大元素II,42. 接雨水

  • 503.下一个更大元素II
  • 42. 接雨水
    • 复杂单调栈
    • 整合单调栈

503.下一个更大元素II

题目链接:下一个更大元素II
因为可以循环,直接拼一个nums在nums后面就行了。

class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        nums1 = nums + nums
        res = [-1] * len(nums1)
        stack = [0]

        for i in range(1,len(nums1)):
            if nums1[i] <= nums1[stack[-1]]:
                stack.append(i)
            else:
                while stack and nums1[i] > nums1[stack[-1]]:
                    res[stack[-1]] = nums1[i]
                    stack.pop()
                stack.append(i)
        #print(res)
        return res[:len(nums)]

42. 接雨水

题目链接:接雨水
这种题还得画图找规律。

复杂单调栈

在这里插入图片描述
这里我找到的规律是如果有坑(左右更大都存在),就把这块面积收集了,但是还是不太会处理平坡(上半张图的两个3,7),不能加两次但也不能直接跳过,因为下面还有一个坑。

class Solution:
    def trap(self, height: List[int]) -> int:
        hl = [-1]*len(height)
        hr = [-1]*len(height)
        stack = [0]
        stack2 = [len(height)-1]

        for i in range(1,len(height)):
            if height[i] <= height[stack[-1]]:
                stack.append(i)
            else:
                while stack and height[i] > height[stack[-1]]:
                    hl[stack[-1]] = i
                    stack.pop()
                stack.append(i)
        
        for i in range((len(height)-2),-1,-1):
            if height[i] <= height[stack2[-1]]:
                stack2.append(i)
            else:
                while stack2 and height[i] > height[stack2[-1]]:
                    hr[stack2[-1]] = i
                    stack2.pop()
                stack2.append(i)
        
        i = 0
        res = 0
        hole = []
        while i < len(height):
            if hl[i] != -1 and hr[i] != -1:
                if [hl[i],hr[i]] not in hole:
                    res += (hl[i]-hr[i]-1)*(min(height[hl[i]],height[hr[i]])-height[i])
                    hole.append([hl[i],hr[i]])
                    #print(res)
            i += 1
        
        return res

整合单调栈

每次找到右边更大的,就把前面坑里的水算一下。
height = [0,1,0,2,1,0,1,3,2,1,2,1]

  • res = 0, stack = [0]
  • 1>0, bottle = 0, stack = []不进if,stack = [1]
  • 0<1, stack = [1,2]
  • 2>0, bottle = 2, stack = [1]进if, res = 1, stack = [3]
  • 1<2, stack = [3,4]
  • 0<1, stack = [3,4,5]
  • 1>0, bottle = 0, stack = [3,4]进if, res = 2, 但1==1, stack = [3,4,6]
  • 3>1, bottle = 1, stack = [3,4]进if, res = 3, 3>0继续
    bottle = 1, stack = [3]进if, res = 5, 3>1继续
    bottle = 1, stack = []不进if
class Solution:
    def trap(self, height: List[int]) -> int:
        res = 0
        stack = [0]

        for i in range(1,len(height)):
            if height[i] <= height[stack[-1]]:
                stack.append(i)
            else:
                while stack and height[i] > height[stack[-1]]:
                    bottle = stack.pop()
                    if stack:
                        h = min(height[stack[-1]],height[i])-height[bottle]
                        w = i - stack[-1]-1   
                        #print(h,w)                 
                        res += h*w
                stack.append(i)
        return res

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/519334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[OGeek2019]babyrop

小白垃圾笔记不建议阅读。。。。 这道题额………………做了好几天。。 更离谱的是还把ubuntu16给玩坏了。 师傅说kali可以打通&#xff0c;气得我连夜下卡里 后来发现不是版本的问题&#xff0c;是我的脚本的问题。libc写的不对。 先分析这道题。 32位程序。没有canary&…

串口与wifi模块

经过以下学习&#xff0c;我们掌握&#xff1a; AT指令与wifi模块的测试方法&#xff1a;通过CH340直接测试&#xff0c;研究各种AT指令下wifi模块的响应信息形式。编程&#xff0c;使用串口中断接收wifi模块对AT指令的响应信息以及透传数据&#xff0c;通过判断提高指令执行的…

C语言函数大全-- w 开头的函数(1)

C语言函数大全 本篇介绍C语言函数大全-- w 开头的函数 1. wcscat 1.1 函数说明 函数声明函数功能wchar_t * wcscat(wchar_t *dest, const wchar_t *src);用于将一个宽字符字符串追加到另一个宽字符字符串的末尾 参数&#xff1a; dest &#xff1a; 目标字符串src &#xf…

29.Mybatis—多表操作与注解开发

目录 一、Mybatis学习。 &#xff08;1&#xff09;MyBatis的多表操作。 &#xff08;1.1&#xff09;一对一查询。 &#xff08;1.2&#xff09;一对多查询。 &#xff08;1.3&#xff09;多对多查询。 &#xff08;1.4&#xff09;三种查询知识小结。 一、Mybatis学习。…

算法修炼之练气篇——练气十二层

博主&#xff1a;命运之光 专栏&#xff1a;算法修炼之练气篇 前言&#xff1a;每天练习五道题&#xff0c;炼气篇大概会练习200道题左右&#xff0c;题目有C语言网上的题&#xff0c;也有洛谷上面的题&#xff0c;题目简单适合新手入门。&#xff08;代码都是命运之光自己写的…

从零开始学习Vue3:掌握前端开发的核心技能——更新中

这里写目录标题 一、了解ts1、ts是js的超集 二、掌握ts基本写法1、数据类型2、对象使用3、类4、多态5、类修饰符6、存储器7、抽象类 一、了解ts 1、ts是js的超集 即你可以在ts中使用原生js语法&#xff1a;JavaScript 更多功能 TypeScript** js是弱类型语言&#xff0c;而t…

ESP32设备驱动-LIS3DSH加速度传感器驱动

LIS3DSH加速度传感器驱动 文章目录 LIS3DSH加速度传感器驱动1、LIS3DH介绍2、硬件准备3、软件准备4、驱动实现1、LIS3DH介绍 LIS3DSH 是一款超低功耗高性能三轴线性加速度计,属于“纳米”系列,具有嵌入式状态机,可通过编程实现自主应用。 LIS3DSH 具有 2g/4g/6g/8g/16g 的动…

八、Consul注册中心

目录 1、到官网下载Consul https://www.consul.io/ 2、解压下载好的压缩包 3、配置系统环境变量 4、WINR启动cmd窗口&#xff0c;输入consul启动命令 5、启动完成后访问Consul页面 http://localhost:8500&#xff08;8500为Consul默认端口号&#xff09; 6、server-mem…

〖Python网络爬虫实战㉔〗- Ajax数据爬取之Ajax 分析案例

订阅&#xff1a;新手可以订阅我的其他专栏。免费阶段订阅量1000 python项目实战 Python编程基础教程系列&#xff08;零基础小白搬砖逆袭) 说明&#xff1a;本专栏持续更新中&#xff0c;目前专栏免费订阅&#xff0c;在转为付费专栏前订阅本专栏的&#xff0c;可以免费订阅付…

Git安装及使用

Git简介 Git是什么 Git是目前世界上最先进的分布式版本控制系统(Version Control System)。 Git的功能 Git安装 Git官网&#xff1a;https://git-scm.com/ 打开安装程序后&#xff0c;一直点击下一步&#xff0c;直到以下位置&#xff1a; 这里选择第一项&#xff0c;即…

Spring基础且核心的两大概念——IoC 与 DI

什么是Spring&#xff1f; Spring 全称 Spring Framework&#xff0c;它是一个目前市场上最流行、结构最庞大的开源框架&#xff0c;之所以如此&#xff0c;是因为其有独特且全面的应用场景&#xff0c;这样好的生态才使企业一直对青睐。 注意这句话&#xff1a;Spring 是包含了…

Vector - 常用CAN工具 - CANoe软件安装常见问题

目录 一、确认电脑系统盘是否满足要求&#xff0c;CANoe软件对PC要求如下&#xff1a; 二、确认软件安装包完整 三、确认软件与电脑系统之间的兼容性 四、关闭后台程序 五、安装软件 六、清空临时文件夹 七、尝试在其他电脑上安装 一、确认电脑系统盘是否满足要求&#…

LLVM代码空间优化(一) 编译器自带的优化选项

最近项目组遇到编译安全固件&#xff0c;超出了r52安全核SRAM自带空间问题。急需要找寻方法优化代码体积&#xff08;代码段大小数据段大小stackbss段&#xff09;方法&#xff0c;目前初步分析只有代码段&数据段有优化的可能&#xff0c;bss和stack优化空间并不大。有方法…

Unity Audio -- (5)声音的可用性考量

在某些情况下&#xff0c;用户可能会关闭声音或者让音量降低至很小的水平&#xff0c;用户本身的听力情况&#xff08;用户可能有听力障碍&#xff0c;失聪等情况&#xff09;也有差异。一个好的设计者应该要考虑到项目的可用性&#xff0c;音频也不例外。本节我们来看看如何能…

由于找不到msvcr100.dll,msvcr100.dll丢失怎样修复

在我们打开游戏或者软件的时候&#xff0c;电脑提示由于找不到msvcr100.dll文件&#xff0c;无法执行此代码是什么意思&#xff1f;msvcr100.dll为什么会丢失&#xff0c;又该如何修复呢&#xff1f;相信这些问题困扰着不少小伙伴&#xff0c;昨天是准备玩吃鸡游戏的时候&#…

被面试官故意刁难,太难了...

今年的金三银四&#xff0c;我和大多数的同行一样加入了升职涨薪的潮水&#xff0c;我早在2个月前就开始准备&#xff0c;我觉得自己在技术方面完全没有问题&#xff0c;于是这两个月我每天在公司摸鱼2小时&#xff0c;回家刷2小时&#xff0c;前前后后刷了几千到面试题&#x…

【LeetCode困难】1263. 推箱子

「推箱子」是一款风靡全球的益智小游戏&#xff0c;玩家需要将箱子推到仓库中的目标位置。 游戏地图用大小为 m x n 的网格 grid 表示&#xff0c;其中每个元素可以是墙、地板或者是箱子。 现在你将作为玩家参与游戏&#xff0c;按规则将箱子 ‘B’ 移动到目标位置 ‘T’ &am…

设计模式|代理模式

代理模式介绍 ​代理模式指为其他对象提供一种代理&#xff0c;以控制对这个对象的访问。在某些情况下&#xff0c;一个对象若不能直接引用另一个对象&#xff0c;而代理对象可以在客户端与目标对象之间起到中介的作用。 代理模式使用场景 普通代理 普通代理模式是指在代理模…

C++的string类使用介绍

string类 1.为什么要学习string类&#xff1f;1.1.C语言中的字符串1.2. 日常中 2. 标准库中的string类2.2 string类(对于单字节的字符)的常用接口说明①string常见的构造函数②string类对象的容量操作③string类对象的访问以及遍历操作④string类对象的修改操作⑤string类非成员…

OrCAD怎样把原理图输出为DXF格式

OrCAD怎样把原理图输出为DXF格式 又有段时间没分享文章了&#xff0c;想想主要还是自媒体写点内容确实不容易&#xff0c;要不断坚持下来更不容易&#xff0c;一直以来也就是凭着“乐于分享”的心在不定时更新。 今天分享的主题是&#xff1a;OrCAD怎样把原理图输出为DXF格式…