day 51 |● 503.下一个更大元素II ● 42. 接雨水

news2024/10/5 13:57:53

503.下一个更大元素II

显示的是循环链表,所以需要遍历两遍。
用i%len(nums)保证循环两遍即可。

func nextGreaterElements(nums []int) []int {
    res := make([]int, len(nums))
    for i := 0; i < len(nums); i++{
        res[i] = -1
    }

    stack := make([]int, 0)
    stack = append(stack,0)
    for i := 1; i % len(nums) < len(nums); i++{
        if i == 2 * len(nums){
            break
        }
        if nums[i % len(nums)] > nums[stack[len(stack) - 1]]{
            for len(stack) != 0 && nums[i % len(nums)] > nums[stack[len(stack) - 1]]{
                res[stack[len(stack) - 1]] = nums[i % len(nums)]
                stack = stack[:len(stack) - 1]
            }

            if i < len(nums){
                stack = append(stack, i)
            }
        }else{
            if i < len(nums){
                stack = append(stack, i)
            }
        }
    } 
    return res
}

42. 接雨水

第一种方法是双指针法,记录包括该点在内左面和右边的最大值,然后累加的过程中挑选小的哪一个作为接雨水的边。这样做可以看成按列来做,每次操作的宽度均为1.
在这里插入图片描述

第二种方法是单调栈解决,如果当前值大于栈顶元素,说明肯定是由了凹坑,所以进行雨水的计算。这个就是按照行来计算了。同时在for循环中要进行判定是否是最边上一个。
在这里插入图片描述

func trap(height []int) int {
    maxleft := make([]int, len(height))
    maxleft[0] = height[0]
    for i := 1; i < len(height); i++{
        maxleft[i] = max(maxleft[i - 1], height[i])
    }
    maxright := make([]int, len(height))
    maxright[len(height) - 1] = height[len(height) - 1]
    for i := len(height) - 2; i >= 0; i--{
        maxright[i] = max(height[i], maxright[i+1])
    }
    res := 0
    for i := 1; i < len(height) - 1; i++{
        tmp := min(maxleft[i], maxright[i]) - height[i]
        res += tmp
    }
    return res
}
func max(a, b int)int{
    if a < b{
        return b
    }
    return a
}
func min(a, b int)int{
    if a < b{
        return a 
    }
    return b
}
func trap(height []int) int {
    stack := make([]int, 0)
    stack = append(stack, 0)
    res := 0
    for i := 1; i < len(height); i++{
        if height[i] > height[stack[len(stack) - 1]]{
            for len(stack) != 0 && height[i] > height[stack[len(stack) - 1]]{
                bottom := stack[len(stack) - 1]
                stack = stack[:len(stack) - 1]
                if len(stack) != 0{
                    h := min(height[stack[len(stack) - 1]], height[i]) - height[bottom]
                    w := i - stack[len(stack) - 1] - 1
                    res += h * w
                }
            }
            stack = append(stack,i)
        }else if height[i] == height[stack[len(stack) - 1]]{
            stack = stack[:len(stack) - 1]
            stack = append(stack,i)
        }else{
            stack = append(stack,i)
        }
    }
    return res
}

func min(a, b int)int{
    if a < b{
        return a 
    }
    return b
}

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

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

相关文章

VoxWeekly|The Sandbox 生态周报|20230904

欢迎来到由 The Sandbox 发布的《VoxWeekly》。我们会在每周发布&#xff0c;对上一周 The Sandbox 生态系统所发生的事情进行总结。 如果你喜欢我们内容&#xff0c;欢迎与朋友和家人分享。请订阅我们的 Medium 、关注我们的 Twitter&#xff0c;并加入 Discord 社区&#xf…

便利连锁店这波操作,赚麻了!

在当今数字化时代&#xff0c;零售业经历了前所未有的革命性变革。消费者期望在购物时获得更多的便捷性、个性化体验和高度智能化的服务。为了满足这些需求&#xff0c;零售商们不得不重新思考他们的经营模式&#xff0c;并将目光投向了新零售模式的未来。 新零售模式不再局限于…

来看看什么是:编译型语言和解释型语言的区别

通过高级语言编写的源码&#xff0c;我们能够轻松理解&#xff0c;但对于计算机来说&#xff0c;它只认识二进制指令&#xff0c;源码就是天书&#xff0c;根本无法识别。源码要想执行&#xff0c;必须先转换成二进制指令。 所谓二进制指令&#xff0c;也就是由 0 和 1 组成的…

非插座式水壶/插座式水壶:SOR/2016-181(水壶法规)和CSA 22.1标准解读!

电水壶作为一种常见的小家电&#xff0c;受到了广大消费者的喜爱。然而&#xff0c;由于安全问题的日益重视&#xff0c;亚马逊加拿大站决定加强对电水壶产品的审核&#xff0c;以确保消费者的安全和权益。 近日&#xff0c;亚马逊平台发布公告&#xff0c;要求在加拿大站销售…

C/C++苹果和虫子 2019年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C苹果和虫子 一、题目要求 1、编程实现 2、输入输出 二、解题思路 1、案例分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 C/C苹果和虫子 2019年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 你买了一箱n个苹果&#xff0c;很不幸…

printf scanf

目录 printf scanf printf 把十的二进制代码放进去了&#xff0c;i对的是二进制代码&#xff0c;指定这一串0101代码以什么样的格式输出。 为什么要输出控制符&#xff0c;因为里面放的是二进制&#xff0c;必须控制输出的格式&#xff0c;指定这一串二进制以什么样的格式输出…

当妈妈们开始精致悦已,母婴品牌该怎么做营销?媒介盒子告诉你

近年来&#xff0c;二孩政策全面放开&#xff0c;母婴行业产品溢价高利润可观&#xff0c;优质品牌层出不穷&#xff0c;那么母婴行业该如何宣传产品呢&#xff1f; 试试软文推广吧&#xff01;软文推广是企业宣传最有效且投入成本最低的宣传方式了。 母婴行业做软文推广可以达…

[uni-app] 海报图片分享方案 -canvas绘制

文章目录 canvas使用记录先看下实际效果图绘制流程及思路1. 绘制头像, 通过drawImage来绘制2.绘制文字部分 具体代码 分享海报图片的方式,以前再RN端采用的是截图方案, 我记得组件好像是 react-native-view-shot 现在要处理uni-app的海报图片分享, 一般也有 html2canvas的相关插…

二维码怎么做调查问卷?二维码统计数据的技巧

小伙伴们一定发现&#xff0c;现在用来收集用户数据时&#xff0c;通过扫码填表的方式在很多场景中都被应用&#xff0c;这种方式有效的提升制作者获取用户数据的速度&#xff0c;而且对于填表者而言也更加的便捷。那么用二维码生成器&#xff08;免费在线二维码生成器-二维码在…

Docker网络功能

基本网络功能 Docker 允许通过外部访问容器或容器互联的方式来提供网络服务。使用docker network子命令来管理Docker网络。 外部访问容器可通过端口映射实现&#xff0c;启动容器时使用-p参数指定映射关系。-p可多次使用来绑定多个端口。使用docker port命令查看当前映射的端…

VR全景拍摄发展如何?在各行业应用中有优势吗?

现如今&#xff0c;虚拟现实技术正在以惊人的速度改变着我们的生活&#xff0c;而VR全景拍摄作为一种创新的拍摄方式&#xff0c;可以为大家带来全新的视觉体验。通过VR全景拍摄&#xff0c;可以将平面画面变得更加逼真、更具沉浸感&#xff0c;让人仿佛置身于真实场景之中。 近…

蚂蚁发布金融大模型:两大应用产品支小宝2.0、支小助将在完成备案后

9月8日&#xff0c;在上海举办的外滩大会上&#xff0c;蚂蚁集团正式发布金融大模型。据了解&#xff0c;蚂蚁金融大 模型基于蚂蚁自研基础大模型&#xff0c;针对金融产业深度定制&#xff0c;底层算力集群达到万卡规模。该大 模型聚焦真实的金融场景需求&#xff0c;在“认知…

恭贺弘博创新2023下半年软考(中/高级)认证课程顺利举行

为迎接2023年下半年软考考试&#xff0c;弘博创新于2023年9月2日举行了精品的软考中/高级认证课程&#xff0c;线下线上学员都积极参与学习。 在课程开始之前&#xff0c;弘博创新的老师为学员们提供了详细的学习资料和准备建议&#xff0c;以确保学员们在课程中能够跟上老师的…

如何排查网站及APP数据泄露的源头

近年来数据泄露安全事件频发&#xff0c;在今年的hw网络安全攻防演练中&#xff0c;获取敏感信息、数据泄露等漏洞的得分也越来越高&#xff0c;我们SINE安全近十年来成功的帮助了许多客户&#xff0c;查找到了数据泄露的原因&#xff0c;在这里向大家分享我们的经验与心得&…

程序员面试逻辑题

红白帽子推理 答案&#xff1a; 这个题有点像数学归纳法&#xff0c;就是假设有 A A A和 B B B两个人是黑色的帽子&#xff0c;这样的话第一次开灯&#xff0c; A A A看到 B B B是黑色的&#xff0c;其他人都是白色的&#xff0c;那么 A A A会觉得 B B B是那个黑色的&#xff0…

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献

【2023高教社杯】B题 多波束测线问题 问题分析、数学模型及参考文献 1 题目 1.1 问题背景 多波束测深系统是利用声波在水中的传播特性来测量水体深度的技术&#xff0c;是在单波束测深的基础上发展起来的&#xff0c;该系统在与航迹垂直的平面内一次能发射出数十个乃至上百个…

从gles,vulkan到metal(二)-- 同步和内存

无论以任何形式本篇文章内容&#xff0c;请注明来自leonnwei的csdn blog 在第一章节中我们讨论了图形API的基本数据结构和图形指令的提交机制&#xff0c;在指令的生成&#xff0c;提交&#xff0c;执行过程中&#xff0c;在复杂而又高度并行的GPU管线中&#xff0c;必然存在着…

安全模型中的4个P

引言&#xff1a;在安全模型中&#xff0c;经常会碰到PDR,PPDR&#xff0c;IPDRR&#xff0c;CARTA-PPDR等模型&#xff0c;其中的P&#xff0c;是predicet&#xff1f;是prevent&#xff1f;还是protect&#xff1f;还是policy呢&#xff1f; 一、4P字典意思解释 1、predict&…

【C++基础】3. 数据类型

文章目录 【 1. 数据类型分类 】1.1 字符型1.2 整型1.3 浮点型1.4 布尔型1.5 无类型1.6 枚举类型1.7 其他类型1.8 类型占用大小输出 【 2. typedef 类型声明 】 使用编程语言进行编程时&#xff0c;我们需要用到各种变量来存储各种信息。变量保留的是它所存储的值的内存位置&am…