代码随想录day48 || 739, 每日温度 496, 下一个更大元素 I 503, 下一个更大元素II

739 每日温度

func dailyTemperatures(temperatures []int) []int {// 双指针var res = make([]int, len(temperatures))for i:=0; i<len(temperatures); i++ {for j:=i+1; j<len(temperatures); j++ {if temperatures[j] > temperatures[i] {res[i] = j - ibreak}}}return res
}// 时间n^2, 空间n  超时

image

//leetcode submit region begin(Prohibit modification and deletion)
func dailyTemperatures(temperatures []int) []int {// 单调栈if len(temperatures) == 1{return []int{0}}var res = make([]int, len(temperatures))var topidx intstack := list.New()for i:=0; i<len(temperatures); i++ {if stack.Len() == 0 {stack.PushFront(i)continue}topidx = stack.Front().Value.(int)if temperatures[i] <= temperatures[topidx] {stack.PushFront(i)}else {for temperatures[topidx] < temperatures[i]{idx := stack.Remove(stack.Front()).(int)res[idx] = i - idxif stack.Len() > 0 {topidx = stack.Front().Value.(int)}else {break}}stack.PushFront(i)}}return res
}
// 简洁版本
func dailyTemperatures(temperatures []int) []int {// 单调栈n := len(temperatures)res := make([]int, n)stack := []int{} // 使用切片作为栈for i := 0; i < n; i++ {for len(stack) > 0 && temperatures[i] > temperatures[stack[len(stack)-1]] {idx := stack[len(stack)-1]stack = stack[:len(stack)-1] // 弹出栈顶元素res[idx] = i - idx}stack = append(stack, i) // 压栈}return res
}

496 下一个更大元素

func nextGreaterElement(nums1 []int, nums2 []int) []int {// 两种思路,第一双循环暴力解法,第二可以单调栈求nums2每一个元素的更大元素,然后hash表nums1,得出结果var res = make([]int, len(nums1))var hash = make(map[int]int, len(nums1))for idx, num := range nums1 {hash[num] = idx}var stack = make([]int, len(nums2))var res2 = make([]int, len(nums2))for i:=0; i<len(nums2); i++{for len(stack) > 0 && nums2[i] > nums2[stack[0]] {idx := stack[0]stack = stack[1: ]res2[idx] = nums2[i]}stack = append([]int{i}, stack...)}//fmt.Println(res2)for i, v := range res2 {if idx, ok := hash[nums2[i]]; ok {if v == 0 {res[idx] = -1}else {res[idx] = v}}}return res
}

503 下一个更大元素II

func nextGreaterElements(nums []int) []int {// 思路取巧一下循环,将其变成两个数组叠加var newNums []int  // 两个数组newNums = append(newNums, nums...)newNums = append(newNums, nums...)fmt.Println(newNums)var stack = make([]int, len(newNums))var res = make([]int, len(newNums))for i, _ := range res {  // 初始化为-1res[i] = -1}for i:=0; i<len(newNums); i++{for len(stack) > 0 && newNums[i] > newNums[stack[len(stack) - 1]] {idx := stack[len(stack) - 1]stack = stack[ : len(stack) - 1]res[idx] = newNums[i]}stack = append(stack, i)}//fmt.Println(res)return res[ : len(nums)]
}
func nextGreaterElements(nums []int) []int {// 正常思路,涉及到环,通过取模运算实现正确的循环var stack = make([]int, len(nums))var res = make([]int, len(nums))for i, _ := range res {  // 初始化为-1res[i] = -1}length := len(nums)for i:=0; i<length * 2; i++{for len(stack) > 0 && nums[i % length] > nums[stack[len(stack) - 1]] {idx := stack[len(stack) - 1]stack = stack[ : len(stack) - 1]res[idx] = nums[i % length]}stack = append(stack, i % length)}//fmt.Println(res)return res
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

奔驰威霆升级配置单

包围款式中网大灯车窗饰条拉手饰条 把手喷漆 主副驾照地灯 车身饰条 侧包围 自动折叠后视镜 开窗玻璃 凯旋中门 电动中门行李架 帷幕小高顶鲨鱼鳍转向灯 尾翼 大尾翼 尾灯尾门饰条 电动尾门 260款尾门总成 锻造轮毂有什么不同见解可以在评论区共同讨论

Git_Intro

目录1. 实验内容及目的 Contents & Objectives for Lab2. Git 的简要介绍 Brief Introduction for Git3. Git的安装 Installation for Git4. Git的一些基本软件命令操作介绍 Basic Operation Commands for Git4.1 克隆已有仓库 Clone Existing Repository4…

《花100块做个摸鱼小网站! 》第五篇—通过xxl-job定时获取热搜数据

⭐️基础链接导航⭐️ 服务器 → ☁️ 阿里云活动地址 看样例 → 🐟 摸鱼小网站地址 学代码 → 💻 源码库地址一、前言 我们已经成功实现了一个完整的热搜组件,从后端到前端,构建了这个小网站的核心功能。接下来,我们将不断完善其功能,使其更加美观和实用。今天的主题是…

《网络数据安全管理条例(草案)》已审议通过

根据新华社北京8月30日电 国务院总理李强8月30日主持召开国务院常务会议,研究推动保险业高质量发展的若干意见,部署落实大食物观相关工作,审议通过《加快完善海河流域防洪体系实施方案》和《网络数据安全管理条例(草案)》,讨论《中华人民共和国海商法(修订草案)》。会…

Linux系统添加软件快捷方式 (图标)

Linux系统添加软件快捷方式 (图标) 背景 在Linux系统下安装软件,安装软件后,常常缺少软件的快捷方式,不熟悉Linux系统的同学甚至不知道软件安装的位置,就算知道软件安装位置的同学也会因打开点开一大堆文件夹而头疼,因此,在Linux系统性为常用软件添置快捷方式显得尤为重…

工作五年小结 | 面对不确定性快速上升的外部环境,我们该如何寻求突破?

1. 前言工作五年了,来京东马上满一年,前四年在开水团,不禁感叹时间过的真快啊!回想19年从西安交大硕士毕业孤身前往北京开始职业生涯,经历了孤独迷茫到自立坚定,再到23年下定决心携妻还蜀安家,并来到京东开始新的征程,这5年过的很快也很充实。今年也是我的而立之年,感…

像操作tar文件一样操作jar文件,让很多事情变得简单

原创 1024夜谭jar文件即Java归档文件,也称为jar包,是Java应用软件或库,通常聚合了大量的Java类文件、相关的元数据和资源文件。通常由构建工具产生,可以使用IDE、反编译工具或者Java诊断工具如Arthas等查看内容。 如果你对tar命令使用得心应手,那么你将发现jar操作与tar操…

Spearman相关性分析 —— 入门案例

简介 Spearman相关系数,也称为Spearman等级相关系数,是一种非参数的统计度量,用于评估两个变量之间的相关性,即它们是否以某种一致的方式一起变化。与皮尔逊相关系数不同,Spearman相关系数不假设数据是正态分布的,也不要求变量是线性关系。Spearman的检验 在统计学中,p值…

.NET 8.0 前后分离快速开发框架

前言 大家好,推荐一个.NET 8.0 为核心,结合前端 Vue 框架,实现了前后端完全分离的设计理念。它不仅提供了强大的基础功能支持,如权限管理、代码生成器等,还通过采用主流技术和最佳实践,显著降低了开发难度,加快了项目交付速度。 如果你需要一个高效的开发解决方案,本框…

一维卡尺边缘对

一、代码部分* 一维卡尺 边缘对read_image (Image, printer_chip/printer_chip_01)*打开助手操作生成代码* Measure 02: Code generated by Measure 02 * Measure 02: Prepare measurement AmplitudeThreshold := 40 RoiWidthLen2 := 5 set_system (int_zooming, true) * Measu…

mongodb 集合的导入导出

在新版本的mongodb中已经不默认安装这些工具,需要到mongodb网站单独下载 https://www.mongodb.com/try/download/database-tools 下载完成后使用scp D:\mongodb-tools.tgz root@8.143.49.192:/home/mongodb_tools.tgz命令将文件复制到linux服务器用 tar -zxvf demo.tar.gz -C …

nginx 版本升级 转载

Nginx 的版本最开始使用的是 Nginx-1.18.0 , 由于服务升级,需要将 Nginx 的版本升级到 Nginx-1.19.7 ,要求 Nginx 不能中断提供服务。 为了应对上述的需求,提供两种解决方案: 方案1: make upgrade 完成升级方案2: 服务信号 完成升级nginx 版本升级环境说明当前是 CentOS…