【C/C++】每日温度 [ 栈的应用 ] 蓝桥杯/ACM备赛

news/2025/2/11 21:23:37/

数据结构考点:栈

题目描述:

给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。

输入输出描述:

输入输出
示例1temperatures = [73,74,75,71,69,72,76,73][1,1,4,2,1,1,0,0]
示例2temperatures = [30,40,50,60][1,1,1,0]
示例3temperatures = [30,60,90] [1,1,0]

详细解答:

解答一:一种会超时的简单算法,不用“栈”

int* dailyTemperatures(int* temperatures, int temperaturesSize, int* returnSize) {int *result,flag;result = (int*)malloc(sizeof(int) * temperaturesSize);returnSize = (int*)malloc(sizeof(int));*returnSize = temperaturesSize;for (int i = 0; i < temperaturesSize;i++){flag = 0;int t = temperatures[i];for (int j = 1; j <= temperaturesSize-1-i;j++){if(t<temperatures[i+j]){result[i] = j;flag = 1;break;}}if(flag==0)result[i] = 0;}return result;
}

 解法二:利用“栈”

(由于题目来源于Leetcode,所以没有主函数)

该程序以C语言为主,利用了C++的一些函数:(但是不可以再Leetcode提交)

#include<stdio.h>
#include<iostream>
#include<stack>
#include<stdc++.h>
using namespace std;
int* dailyTemperatures(int* temperatures, int temperaturesSize, int* returnSize) {int *result;result = (int*)malloc(sizeof(int) * temperaturesSize);memset(result, 0, sizeof(int) * temperaturesSize);*returnSize = temperaturesSize;stack<int> sta;sta.push(0);int i, j;for (i = 1;i<temperaturesSize;i++){if(temperatures[sta.top()]<temperatures[i]){while(!sta.empty()&&temperatures[sta.top()]<temperatures[i]){result[sta.top()] = i - sta.top();sta.pop();}sta.push(i);}else {sta.push(i);}}return result;
}

解法三:C++

class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {vector<int> result(temperatures.size(), 0);stack<int> sta;sta.push(0);int i, j;for (i = 1;i<temperatures.size();i++){if(temperatures[sta.top()]<temperatures[i]){while(!sta.empty()&&temperatures[sta.top()]<temperatures[i]){result[sta.top()] = i - sta.top();sta.pop();}sta.push(i);}else {sta.push(i);}}return result;}
};

题目来源:Leetcode739.【 739. 每日温度 - 力扣(LeetCode)】


http://www.ppmy.cn/news/1571244.html

相关文章

linux_kernel驱动开发_驱动调试

整体框架 调试思路 对比开发板检查差异性。用试波器或万用表调试。配合硬件工程师共同解决问题。 开发思路 先在config中打开相应宏开关。设备树中加入相应配置即可。&#xff08;可以扩展讲解宏开关有无生效&#xff09; 驱动开发 pcie 先lspci查看是否注册成功。然后才…

DeepSeek在FPGA/IC开发中的创新应用与未来潜力

随着人工智能技术的飞速发展&#xff0c;以DeepSeek为代表的大语言模型&#xff08;LLM&#xff09;正在逐步渗透到传统硬件开发领域。在FPGA&#xff08;现场可编程门阵列&#xff09;和IC&#xff08;集成电路&#xff09;开发这一技术密集型行业中&#xff0c;DeepSeek凭借其…

前后端分离项目部署到云服务器、宝塔(前端vue、后端springboot)详细教程

一、部署介绍 部署的环境是宝塔&#xff08;宝塔9.0.0&#xff09;、阿里云服务器&#xff08;centos 7.6&#xff09;&#xff1b;前端是Vue3项目、后端是springboot3x、jdk11、数据库有redis、mysql&#xff1b;搜索采用的是es。 由于宝塔面板中可以快速进行环境的配置&…

C# 字符串与正则表达式介绍

.NET学习资料 .NET学习资料 .NET学习资料 在 C# 编程中&#xff0c;字符串和正则表达式是处理文本数据时不可或缺的工具。深入理解它们的特性和用法&#xff0c;能够显著提升开发效率和代码质量。 一、C# 字符串 &#xff08;一&#xff09;字符串的不可变性 在 C# 中&…

centOS8安装MySQL8设置开机自动启动失败

提供一个终极解决方案虽然systemctl 更符合管理预期但是不能用 使用一下命令 修改配置文件、修改mysql.service全是问题 systemctl start mysqld systemctl enable mysqld systemctl daemon-reload完全不生效各种报错 提示配置文件内容有问题 Main process exited, codeexite…

go并发和并行

进程和线程 进程&#xff08;Process&#xff09;就是程序在操作系统中的一次执行过程&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;进程是一个动态概念&#xff0c;是程序在执行过程中分配和管理资源的基本单位&#xff0c;每一个进程都有一个自己的地址空间。…

WordPress博客在fnOS环境下的极简搭建与公网地址配置指南

文章目录 前言1. Docker下载源设置2. Docker下载WordPress3. Docker部署Mysql数据库4. WordPress 参数设置5. 飞牛云安装Cpolar工具6. 固定Cpolar公网地址7. 修改WordPress配置文件8. 公网域名访问WordPress 前言 你是否曾经为搭建自己的网站而头疼不已&#xff1f;是不是觉得…

React 中的 useMemo 和 useCallback 有什么区别?

useMemo 和 useCallback 是 React 中的两个 Hook,主要用于性能优化,但它们的用途和工作方式有所不同。以下是它们之间的主要区别: 1. useMemo 用途:用于记忆计算值。它可以避免在每次组件渲染时重新计算一个值,只有当依赖项发生变化时,才会重新计算。 返回值:返回缓存的…