牛客2024【牛客赛文X】春招冲刺ONT61 每日温度【hard 单调栈 Java、Go、PHP】

题目

在这里插入图片描述题目链接:
https://www.nowcoder.com/practice/1f54e163e6944cc7b8759cc09e9c78d8

思路

	单调栈最直接的应用就是获取数组中每个位置i,i的左边第一个比i大或者小的位置/数以及,i的右边第一个比i大或者小的位置/数不懂的同学看这里https://blog.csdn.net/Borslav/article/details/125469491

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 每日温度* @param dailyTemperatures int整型一维数组* @return int整型一维数组*/public int[] temperatures (int[] dailyTemperatures) {//单调栈,递减栈// 也就是先求每个元素i左边,右边离他最近的第一个大于i的数,没有大于i的用-1表示int n = dailyTemperatures.length;int[][] bigarr = new int[n][2];//单调递减栈Stack<List<Integer>> stack = new Stack<>();for (int i = 0; i < n ; i++) {while (!stack.isEmpty() &&dailyTemperatures[stack.peek().get(0)] < dailyTemperatures[i]) {List<Integer> pops = stack.pop();int leftBigger = stack.isEmpty() ? -1 : stack.peek().get(stack.peek().size() - 1);for (Integer pop : pops) {bigarr[pop][0] = leftBigger; //pop左边边第一个比pop大的位置bigarr[pop][1] = i; //pop右边第一个比pop大的位置}}if (!stack.isEmpty() &&dailyTemperatures[stack.peek().get(0)] == dailyTemperatures[i]) {stack.peek().add(i);} else {List<Integer> ll = new ArrayList<>();ll.add(i);stack.push(ll);}}while (!stack.isEmpty()) {List<Integer> pops = stack.pop();int leftBigger = stack.isEmpty() ? -1 : stack.peek().get(stack.peek().size() - 1);for (Integer pop : pops) {bigarr[pop][0] = leftBigger;bigarr[pop][1] = -1;}}//前面的代码是通用的单调栈的模板,// 答案中我们只需要用到bigarr中每个元素的1下标,即右边第一个比自己大的位置int[] ans = new int[n];for (int i = 0; i < n ; i++) {if (bigarr[i][1] == -1) {ans[i] = 0;} else {ans[i] = bigarr[i][1] - i;}}return ans;}
}

参考答案Go

package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 每日温度* @param dailyTemperatures int整型一维数组* @return int整型一维数组*/
func temperatures(dailyTemperatures []int) []int {//单调栈,递减栈// 也就是先求每个元素i左边,右边离他最近的第一个大于i的数,没有大于i的用-1表示n := len(dailyTemperatures)bigarr := make([][]int, n)//单调递减栈stack := [][]int{} //GO中栈用切片表示即可for i := 0; i < n; i++ {stlen := len(stack)for len(stack) > 0 && dailyTemperatures[stack[stlen-1][len(stack[stlen-1])-1]] < dailyTemperatures[i] {pops := stack[stlen-1]stack = stack[:stlen-1]leftbig := 0if len(stack) == 0 {leftbig = -1} else {stlen = len(stack)leftbig = stack[stlen-1][len(stack[stlen-1])-1]}for _, v := range pops {bigarr[v] = make([]int, 2)bigarr[v][0] = leftbig //v左边第一个比v大的位置bigarr[v][1] = i       //v右边第一个比v大的位置}}stlen = len(stack)if len(stack) > 0 && dailyTemperatures[stack[stlen-1][len(stack[stlen-1])-1]] == dailyTemperatures[i] {stack[stlen-1] = append(stack[stlen-1], i)} else {list := []int{}list = append(list, i)stack = append(stack, list)}}for len(stack) > 0 {stlen := len(stack)pops := stack[stlen-1]stack = stack[:stlen-1]leftbig := 0if len(stack) == 0 {leftbig = -1} else {stlen = len(stack)leftbig = stack[stlen-1][len(stack[stlen-1])-1]}for _, v := range pops {bigarr[v] = make([]int, 2)bigarr[v][0] = leftbigbigarr[v][1] = -1}}//前面的代码是通用的单调栈的模板,// 答案中我们只需要用到bigarr中每个元素的1下标,即右边第一个比自己大的位置ans := make([]int, n)for i := 0; i < n; i++ {if bigarr[i][1] == -1 {ans[i] = 0} else {ans[i] = bigarr[i][1] - i}}return ans
}

参考答案PHP

在这里插入代码片

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

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

相关文章

docker完美安装分布式任务调度平台XXL-JOB

分布式任务调度平台XXL-JOB 1、官方文档 自己看 https://www.xuxueli.com/xxl-job/#1.1%20%E6%A6%82%E8%BF%B0 2、使用docker部署 本人使用的腾讯云&#xff0c;安装docker暴露一下端口&#xff0c;就很舒服的安装这个服务了。 docker pull xuxueli/xxl-job-admin:2.4.03…

使用Docker部署Node.js

第一步&#xff1a;在Node.js项目的根目录中新建Dockerfile文件 # 使用官方 Node.js 镜像作为基础镜像 FROM node:latest# 设置工作目录 WORKDIR /usr/src/app# 将项目文件复制到容器中 COPY . .# 将npm源设置为淘宝镜像 RUN npm config set registry https://registry.npmmir…

大数据深度学习:基于Tensorflow深度学习的神经网络CNN算法垃圾分类识别系统

文章目录 大数据深度学习&#xff1a;基于Tensorflow深度学习的神经网络CNN算法垃圾分类识别系统一、项目概述二、深度学习卷积神经网络&#xff08;Convolutional Neural Networks&#xff0c;简称CNN&#xff09;三、部分数据库架构四、系统实现系统模型部分核心代码模型训练…

React + three.js 3D模型面部表情控制

系列文章目录 React 使用 three.js 加载 gltf 3D模型 | three.js 入门React three.js 3D模型骨骼绑定React three.js 3D模型面部表情控制 示例项目(github)&#xff1a;https://github.com/couchette/simple-react-three-facial-expression-demo 示例项目(gitcode)&#xff…

嵌入式操作教程_数字信号处理_音频编解码:3-6 AAC音频解码实验

一、实验目的 了解AAC音频格式&#xff0c;掌握AAC音频解码的原理&#xff0c;并实现将AAC格式的音频解码为PCM 二、实验原理 音频编解码的主要对象是音乐和语音&#xff0c;音频的编解码格式可分为无压缩的格式、无损压缩格式、有损音乐压缩格式、有损语音压缩格式和合成算…

Testng测试框架(6)--@Factory动态地创建测试类的实例

工厂允许您动态地创建测试。例如&#xff0c;假设您想创建一个测试方法&#xff0c;该方法将多次访问网站上的某个页面&#xff0c;并且您希望使用不同的值来调用它。 public class TestWebServer {Test(parameters { "number-of-times" })public void accessPage(…

突破界限 千视将在 NAB 2024 展会上展示领先的 AV over IP 技术

突破界限&#xff01;千视将在 NAB 2024 展会上展示领先的 AV over IP技术 作为AV over IP领域的先驱者&#xff0c;Kiloview将于2024年4月14日至17日在NAB展会&#xff08;展台号&#xff1a;SU6029&#xff09;隆重登场&#xff0c;展示我们领先业界的AV over IP产品、解决方…

jenkins 启动linux节点时 控制台中文显示问号乱码

新增一个jenkins节点时&#xff0c;遇到了控制台中文输出问号的问题。 网上各种配置jenkins的全局变量&#xff0c;都不行。 最终是 节点列表 ->对应节点 -> 启动方式 -> 高级 添加JVM选项 -Dfile.encodingUTF-8

ASUS华硕ROG幻16Air笔记本电脑GU605M原装出厂Win11系统工厂包下载,带有ASUSRecovery一键重置还原

适用型号&#xff1a;GU605MI、GU605MY、GU605MZ、GU605MV、GU605MU 链接&#xff1a;https://pan.baidu.com/s/1YBmZZbTKpIu883jYCS9KfA?pwd9jd4 提取码&#xff1a;9jd4 华硕原厂Windows11系统带有ASUS RECOVERY恢复功能、自带所有驱动、出厂主题壁纸、系统属性联机支持…

linux学习:栈(汉诺塔游戏)

第一根上面套着 64 个圆的金片&#xff0c;最大的一个在底下&#xff0c;其余一个比一个小&#xff0c;依次叠上去&#xff0c;庙里的众僧不倦地 把它们一个个地从这根棒搬到另一根棒上&#xff0c;规定可利用中间的一根棒作为帮助&#xff0c;但每次只能 搬一个&#xff0c;而…

Linux:Redis7.2.4的源码包部署(2)

本章使用的是centos9进行部署 1.获取rpm安装包 Index of /releases/ (redis.io)https://download.redis.io/releases/这个网站有历史的版本&#xff0c;我这里使用的是最新版7.2.4进行安装 点击即可进行下载 方进Linux中&#xff0c;如果你的Linux中可以直接使用wget去下载 2…

自动驾驶硬回灌和软回灌

目录 前言 一、硬回灌 实时性 直接影响行为 高度依赖传感器 二、软回灌 非实时性 系统优化和改进 数据驱动的学习 三、区别与联系 四、自动驾驶中硬回灌和软回灌代表性方法 硬回灌 软回灌 前言 自动驾驶系统中&#xff0c;"硬回灌"和"软回灌"…