首页 > 编程语言 >代码随想训练营第五十九天(Python)| 503.下一个更大元素II、42. 接雨水

代码随想训练营第五十九天(Python)| 503.下一个更大元素II、42. 接雨水

时间:2023-12-08 15:47:18浏览次数:37  
标签:nums Python 42 len height int ans stack 503

[503.下一个更大元素II]
循环问题用 2*n , i % n 的方式

        n = len(nums)
        ans = [-1] * n
        stack = []
        for i in range(2 * n):
            while len(stack) > 0 and nums[i % n] > nums[stack[-1]]:
                ans[stack[-1]] = nums[i % n]
                stack.pop()
            stack.append(i % n)
        return ans

[42. 接雨水]
1、双指针
注意点: 按列计算,找出左右的最大值

class Solution:
    def trap(self, height: List[int]) -> int:
        if len(height) <= 2:
            return 0
        n = len(height)
        l_max_h, r_max_h = [0] * n, [0] * n
        l_max_h[0], r_max_h[n-1] = height[0], height[n-1]
        for i in range(1, n):
            l_max_h[i] = max(height[i], l_max_h[i-1])
        for j in range(n-2, -1, -1):
            r_max_h[j] = max(height[j], r_max_h[j+1])
        sum1 = 0
        for k in range(1, n-1):
            cur_h = min(l_max_h[k], r_max_h[k]) - height[k]
            if cur_h > 0:
                sum1 += cur_h
        return sum1

2、单调栈

class Solution:
    def trap(self, height: List[int]) -> int:
        n = len(height)
        # 单调递减栈
        stack = []
        ans = 0
        for i in range(n):
            while len(stack) > 0 and height[i] > height[stack[-1]]:
                mid = stack.pop()
                if len(stack) > 0:
                    h = min(height[stack[-1]], height[i]) - height[mid]
                    w = i - stack[-1] - 1
                    ans += h * w
            stack.append(i)
        return ans

标签:nums,Python,42,len,height,int,ans,stack,503
From: https://www.cnblogs.com/yixff/p/17888270.html

相关文章

  • Python制作AI贪吃蛇,很多很多细节、思路都写下来了!
    前提:本文实现AI贪吃蛇自行对战,加上人机对战,读者可再次基础上自行添加电脑VS电脑和玩家VS玩家(其实把人机对战写完,这2个都没什么了,思路都一样)实现效果:具体功能:1.智能模式:电脑自己玩(自己吃食物)2.人机对战:电脑和人操作(在上步的基础上加一个键盘控制的贪吃蛇即可)实现环境:Pycharm+Pytho......
  • JetBrains PyCharm 2023.3 (macOS, Linux, Windows) - 面向专业开发者的 Python IDE
    JetBrainsPyCharm2023.3(macOS,Linux,Windows)-面向专业开发者的PythonIDE请访问原文链接:https://sysin.org/blog/jb-pycharm-2023/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgJetBrainsPyCharm-面向专业开发者的PythonIDE为什么选择PyCharm在一......
  • 在Python中,​​type()​​函数有两种用法
    在Python中,type()函数有两种用法¹²³⁴⁵:查看数据类型:当type()函数只有一个参数时,它会返回该参数的数据类型¹²³⁴⁵。例如:x=123print(type(x))#输出:<class'int'>在这个例子中,type(x)返回了x的数据类型,即<class'int'>,表示x是一个整数¹²³⁴⁵。动态创建类:当type()函......
  • Python将列表数据保存为excel
    一、需求背景工作需要将列表数据写入到excel中,方便运营同学查看,数据示例如下:data_0=[[['Name','Age','Gender'],['Jack',22,'Male'],['Tom',34,'Female']],[['id&#......
  • Python:对图片批量进行重命名
    一、对图片批量进行重命名os.listdir(path)#获取文件目录列表1、定义一个修改名称方式2、主函数定义#1、定义修改方法defrename(path):file_list=os.listdir(path)#获取文件目录列表num=len(file_list)#获取个数i=0;......
  • 【Lidar】Python实现点云CSF布料滤波算法&提取地面点
    ​    这两天会持续更新一下Python处理点云数据的教程,大家可以点个关注。今天给大家分享一下点云的经典算法:CSF布料模拟算法。1CSF算法简介        CSF算法,全称为ClothSimulationFiltering,是一种基于欧几里得空间中最小生成树思想的聚类算法,它可以很好地......
  • Frida server 和 python client下载
    前言全局说明Fridaserver和pythonclient下载安装一、相关连接server下载:最新版:https://github.com/frida/frida/releases15.2.2版:https://github.com/frida/frida/releases/tag/15.2.216.0.1版:https://github.com/frida/frida/releases/tag/16.0.1Pythonclient下载......
  • 【python】@property装饰器
    @property介绍:@property是一个内置的装饰器,用于将一个方法变成属性调用。让方法可以像实例属性那样进行访问,这样可以保证对象状态的封装性,同时,将数据的“获取”和“修改”集成到一处处理,提高代码的可读性和可维护性。通过对比,解释@property的意义:classPerson:def__init_......
  • 高并发爬虫用Python语言适合吗?
    不管你用什么语言没在进行高并发前,有几点是需要考虑清楚的,;例如:数据集大小,算法、是否有时间和性能方面的制约,是否存在共享状态,如何调试(这里指的是日志、跟踪策略)等一些问题。带着这些问题,我们一起探讨下python高并发爬虫的具体案例。在Python中实现高并发爬虫,我们可以使用异步编程库......
  • python如何提取excel表格中的超链接
    importxlrddefget_wb(path):wb=xlrd.open_workbook(path)returnwbdefget_wb(path):wb=xlrd.open_workbook(path)returnwbdefget_hyperlink(wb,sheet_name,cell):worksheet=wb.sheet_by_name(sheet_name)hyperlink=worksheet.......