LeetCode 739 每日温度
1。直接遍历 暴力求解
class Solution
{
public:
vector<int>dailyTemperatures(vector<int>& T)
{
vector<int>res(T.size(),);
for(int i=;i<T.size();i++)
{
if(T[i]<= && T[i]>=)
{
for(int j=i;j<T.size();j++)
{
if(T[j]>T[i])
{
res[i]=(j-i);
break;
}
//到了最后一个元素,但是还是没找到比T[i]大的
}
}
}
return res;
}
};
2 利用栈
我们需要找到比当前 T[i] 温度更高的位置,那么必须要记录哪些信息?
我们试着找到 T[0] 过后温度升高的位置。如果知道 T[10]=50,则 T[20]=50 是无效信息,因为 T[i] 在 T[20] 以前已经到达了 50。如果 t[20]=100 将是有用的信息,因为如果 t[0]=80,那么 T[20] 将有可能是它的下一个温度升高的位置,而 T[10] 则不可能是。
因此,我们需要记住一个索引的列表,索引代表的温度严格递增。我们可以利用栈来实现这样的效果。
算法:
我们用栈记录索引,满足 T[stack[-1]] < T[stack[-2]] < ...,其中 stack[-1] 是栈的顶部,stack[-2] 是从顶部开始的第二个元素,依此类推;我们将在处理每个 T[i] 时保持 stack[-1] > stack[-2] > ...。
我们通过当前温度和栈顶索引所代表的温度比较来找到温度升高的位置。
举个例子:我们反向遍历处理 t=[73,74,75,71,69,72,76,73] ,通过看栈元素的变化来理解是如何工作的。为了清楚 stack 只包含索引 i,但是将把 T[i] 的值写在旁边的括号中,例如 0 (73)。
当 i = 7,stack = [7 (73)]。ans[i] = 0。
当 i = 6,stack = [6 (76)]。ans[i] = 0。
当 i = 5,stack = [5 (72), 6 (76)]。ans[i] = 1。
当 i = 4,stack = [4 (69), 5 (72), 6 (76)]。ans[i] = 1。
当 i = 3,stack = [3 (71), 5 (72), 6 (76)]。ans[i] = 2。
当 i = 2,stack = [2 (75), 6 (76)]。ans[i] = 4。
当 i = 1,stack = [1 (74), 2 (75), 6 (76)]。ans[i] = 1。
当 i = 0,stack = [0 (73), 1 (74), 2 (75), 6 (76)]。ans[i] = 1。
class Solution{
private:
public:
vector<int>dailyTemperatures(vector<int>& T)
{
vector<int>res(T.size(),);
stack<int>tempStack;
for(int j=T.size()-;j>=;j--)
{
while(tempStack.size()!= && T[j]>=T[tempStack.top()])
tempStack.pop();
if(tempStack.size()!=) res[j]=tempStack.top()-j;
tempStack.push(j);
}
return res;
}
};
LeetCode 739 每日温度的更多相关文章
- Java实现 LeetCode 739 每日温度(暴力循环)
739. 每日温度 根据每日 气温 列表,请重新生成一个列表,对应位置的输出是需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temper ...
- [LeetCode]739. 每日温度(单调栈)
题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures ...
- LeetCode——739. 每日温度
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures = ...
- LeetCode:每日温度【739】
LeetCode:每日温度[739] 题目描述 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数.如果之后都不会升高,请输入 0 来代替. 例如,给定一个列 ...
- [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找
739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...
- 每日温度(LeetCode Medium难度算法题)题解
LeetCode 题号739中等难度 每日温度 题目描述: 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 ...
- LeetCoded第739题题解--每日温度
每日温度 请根据每日 气温 列表,重新生成一个列表.对应位置的输出为:要想观测到更高的气温,至少需要等待的天数.如果气温在这之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temper ...
- LeetCode739 每日温度
根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数.如果之后都不会升高,请输入 0 来代替. 例如,给定一个列表 temperatures = [73, 74 ...
- LeetCode 739. Daily Temperatures (每日温度)
题目标签:HashMap 题目给了我们一组温度,让我们找出 对于每一天,要等多少天,气温会变暖.返回一组等待的天数. 可以从最后一天的温度遍历起,从末端遍历到开头,对于每一天的温度,把它在T里面的in ...
随机推荐
- Java流程控制之循环语句
循环概述 循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将 ...
- 排序算法| Array.sort()算法规则
1.js的Array.sort()是使用什么算法排序: 1.火狐中是“归并排序” 2.V8引擎是 “插入排序和快速排序结合”.数组长度不超过10时,使用插入排序.长度超过10使用快速排序.在数组较短时 ...
- 洛谷 P4017 最大食物链计数
洛谷 P4017 最大食物链计数 洛谷传送门 题目背景 你知道食物链吗?Delia生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条.于是她来就来求助你,然而你也不会啊!写 ...
- WPF 精修篇 DataGrid 筛选
原文:WPF 精修篇 DataGrid 筛选 DataGrid也可以分组 但是用的地方不多 就没写 筛选还是可以的 比如Datagrid数据量比较大 要做数据筛选 贴码 <DataGrid x: ...
- Paper | Adaptive Computation Time for Recurrent Neural Networks
目录 1. 网络资源 2. 简介 3. 自适应运算时间 3.1 有限运算时间 3.2 误差梯度 1. 网络资源 这篇文章的写作太随意了,读起来不是很好懂(掺杂了过多的技术细节).因此有作者介绍会更好. ...
- 一站式解决Mac--socket.gaierror: [Errno 8] nodename nor servname provided, or not known
socket.gaierror: [Errno 8] nodename nor servname provided, or not known 原因:hostname 没有写在/etc/hosts里 ...
- Flink1.7.2安装部署的几种方式
原文链接:https://blog.csdn.net/a_drjiaoda/article/details/88037282 前言:Flink的运行一般分为三种模式,即local.Standalone ...
- Containers vs Serverless:本质区别是什么?
在云计算领域,容器和无服务器计算已经占据了发展前列. 作者 | Emra Samdan 翻译 | bocloudresearch 一点历史 在不久以前,应用程序的开发.部署和维护要比现在复杂得多,耗时 ...
- Nginx之前后端分离(入门)
几个月前,公司架构优化,首先就是前后端分离. 所谓前后端分离,就是在传统的前后端代码都在一个项目里的基础上,将前后端代码抽离,把前端代码从后端项目了分离出来,前后端开发人员各自在自己的项目里开发. 为 ...
- C# 获取系统硬件可用信息
如何获取系统可用磁盘和可用内存? 1 获取磁盘信息 这个有自带的 DriveInfo 可以用. DriveInfo 类 (System.IO) | Microsoft Docs 2 获取内存信息 参考 ...