本文主要是介绍【LeetCode75】第七十四题 每日温度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
题目:
示例:
分析:
代码:
题目:
示例:
分析:
题目给我们一个数组,表示每天的温度,要我们返回一个同样长度的数组,答案里装着当前气温的下一个更高气温的距离天数。也就是找到数组中这个数的下一个更大的数,答案填入他们的距离。
那么找到下一个更大或者是更小的值这类题,我们可以使用单调栈来解决。
单调栈顾名思义,是一个栈,不过我们需要维持栈内是单调有序的。
我们把元素依次和栈顶元素对比,如果比栈顶元素更小,我们就接着入栈,直到遇到了比栈顶元素更大的值,我们就将栈顶元素出栈,并且就算是找了第一个比栈顶元素更大的值,这一过程一直重复,直到这个元素小于新的栈顶元素了,我们再接着把这个元素入栈。
这样就保持了栈内有序,并且遍历数组完毕之后,我们也找到了每个数的下一个更大元素。
我们入栈的是数组的下标,这样就可以计算出下一个更大数的距离了,并且我们也可以通过下标来获取到对应的值。
代码:
class Solution {
public:vector<int> dailyTemperatures(vector<int>& temperatures) {vector<int>res(temperatures.size(),0); //一律先初始化为0,有更高气温出现再修改vector<int>stack; //vector模拟栈for(int i=0;i<temperatures.size();i++){if(stack.empty()){ //如果栈空直接加入stack.push_back(i);}else{//遇到比栈顶更高的气温,那么更新答案中栈顶气温的下标的值//因为当前气温可能会比多个之前的气温更高,所以用whilewhile(!stack.empty()&&temperatures[i]>temperatures[*(stack.end()-1)]){int last=*(stack.end()-1);res[last]=i-last;stack.pop_back();}stack.push_back(i);}}return res;}
};
这篇关于【LeetCode75】第七十四题 每日温度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!