首页 > 编程语言 >代码随想录算法训练营第50天 | 单调栈01

代码随想录算法训练营第50天 | 单调栈01

时间:2024-07-28 15:08:33浏览次数:16  
标签:01 nums int res 随想录 50 len st nums2

代码随想录算法训练营第天 |

739.每日温度
https://leetcode.cn/problems/daily-temperatures/description/
代码随想录
https://programmercarl.com/0739.每日温度.html#其他语言版本
496.下一个更大元素 I
https://leetcode.cn/problems/next-greater-element-i/description/
代码随想录
https://programmercarl.com/0496.下一个更大元素I.html#算法公开课
503.下一个更大元素II
https://leetcode.cn/problems/next-greater-element-ii/description/
代码随想录
https://programmercarl.com/0503.下一个更大元素II.html#算法公开课

739.每日温度

  • 要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了
  • 用一个栈来记录我们遍历过的元素
  • 递增循序:栈头栈底
  • 具体操作:
    -保证新增栈元素是栈内最小的值;
    -遇到比栈顶值大的值 弹出该值 该值找到了最近的比其大的值 增加至结果;
点击查看代码
class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        st = [0]
        res = [0]*len(temperatures)
        for i in range(len(temperatures)):
            while len(st)>0 and temperatures[i]>temperatures[st[-1]]:
                res[st[-1]] = i-st[-1]
                st.pop()
            st.append(i)
        return res

496.下一个更大元素 I

  • 更改元素主体 本质没有变
  • 只需要在nums2中遍历出结果 然后按照nums1放置结果
点击查看代码
class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        res = [-1]*len(nums1)
        st = [0]
        for i in range(1,len(nums2)):
            while len(st)>0 and nums2[i]>nums2[st[-1]]:
                if nums2[st[-1]] in nums1:
                    index = nums1.index(nums2[st[-1]])
                    res[index] = nums2[i]
                st.pop()
            st.append(i)
        return res

503.下一个更大元素II

  • 只需要解决循环的问题
  • 通过遍历数组两遍即可解决 i = i%n
点击查看代码
class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        res = [-1]*len(nums)
        st = [0]
        n = len(nums)
        for i in range(1,2*len(nums)):
            while len(st)>0 and nums[i%n]>nums[st[-1]]:
                res[st[-1]] = nums[i%n]
                st.pop()
            st.append(i%n)
        return res

标签:01,nums,int,res,随想录,50,len,st,nums2
From: https://www.cnblogs.com/P201821440041/p/18328240

相关文章

  • 代码随想录算法训练营第49天 | 动态规划总结
    代码随想录算法训练营第天|647.回文子串https://leetcode.cn/problems/palindromic-substrings/description/代码随想录https://programmercarl.com/0647.回文子串.html#思路516.最长回文子序列https://leetcode.cn/problems/longest-palindromic-subsequence/代码随想录......
  • 力扣高频SQL 50题(基础版)第二十题
    文章目录力扣高频SQL50题(基础版)第二十题2356.每位教师所教授的科目种类的数量题目说明思路分析实现过程准备数据实现方式结果截图力扣高频SQL50题(基础版)第二十题2356.每位教师所教授的科目种类的数量题目说明表:Teacher±------------±-----+|ColumnName......
  • LeetCode面试150——189轮转数组
    题目难度:中等默认优化目标:最小化平均时间复杂度。Python默认为Python3。1题目描述给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。示例1:输入:nums=[1,2,3,4,5,6,7],k=3输出:[5,6,7,1,2,3,4]解释:向右轮转1步:[7,1,2,3,4,5,6]......
  • P3964 [TJOI2013] 松鼠聚会
    原题链接题解对于\((a_1,b_1),(a_2,b_2)\)的切比雪夫距离,可以看做成\((\frac{a_1+b_1}{2},\frac{a_1-b_1}{2}),(\frac{a_2+b_2}{2},\frac{a_2-b_2}{2})\)的曼哈顿距离不信你分类讨论看看某一点到其他点的曼哈顿距离,等于所有小于该点和大于该点的x,y的坐标差之和code#incl......
  • 【教学类-70-01】20240728一个茶壶两个茶杯(果茶)
    ‘背景需求:用通义万相下载简笔画茶壶、茶杯茶杯,简单笔画,卡通,黑白,未着色,幼儿插图,线条画,没有背景,没有颜色,黑白漫画线条艺术:,空背景,粗轮廓,清晰的线条,矢量线。简单,大,茶壶,简单笔画,卡通,黑白,未着色,幼儿插图,线条画,没有背景,没有颜色,黑白漫画线条艺术:,空背景,粗轮廓,清晰的线条,矢量......
  • MSPM0G3507外设DMA学习笔记
    概述变量的存储正常情况下,变量存储在SRAM中,如果要发送该变量的值到外设,需要调用内核操作,使SRAM中的数据送到外设。此类型操作过多会导致占用CPU高,整体卡顿。DMA控制概述DMA:DirectMemoryAccess专门用于数据传输,解放CPU对于DMA,CPU首先启动传输,然后在传输过程中执行其......
  • (BS ISO 11898-1:2015)CAN_FD 总线协议详解5- MAC子层描述3
    目录 创作不易,请帮忙点赞+评论+转载,非常感谢5.4.3MACRF(远程帧)规范5.4.3.1描述5.4.3.2MACDF和MACRF相同的字段5.4.3.3仲裁字段5.4.3.4控制字段5.4.4错误帧(EF)的规范5.4.4.1描述5.4.4.2错误标志5.4.4.3错误分隔符5.4.5过载帧(OF)的规定5.......
  • CCF-CSP 201412-1 门禁系统
    一、问题描述问题描述涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况。每位读者有一个编号,每条记录用读者的编号来表示。给出读者的来访记录,请问每一条记录中的读者是第几次出现。输入格式输入的第一行包含一个整数n,表示涛涛的记录条数。第二行......
  • QOJ5090 妙妙题
    将白色看作\(0\),黑色看作\(1\),并将所有人等距离排在圆上,若知道所有人颜色的异或和,就可以根据自己看见的颜色集合判断自己的颜色,且将圆等切为两半一定有少的一边的人数\(\ge\lfloor\frac{n-1}{2}\rfloor\),但若圆两边的黑点关于切线翻转对称(如下图),则会出现看到颜色相同的两人......
  • 代码随想录二刷——数组
     ......