【LeetCode75】第七十四题 每日温度

目录

题目:

示例:

分析:

代码:


题目:

【LeetCode75】第七十四题 每日温度_第1张图片

示例:

【LeetCode75】第七十四题 每日温度_第2张图片

分析:

题目给我们一个数组,表示每天的温度,要我们返回一个同样长度的数组,答案里装着当前气温的下一个更高气温的距离天数。也就是找到数组中这个数的下一个更大的数,答案填入他们的距离。

那么找到下一个更大或者是更小的值这类题,我们可以使用单调栈来解决。

单调栈顾名思义,是一个栈,不过我们需要维持栈内是单调有序的。

我们把元素依次和栈顶元素对比,如果比栈顶元素更小,我们就接着入栈,直到遇到了比栈顶元素更大的值,我们就将栈顶元素出栈,并且就算是找了第一个比栈顶元素更大的值,这一过程一直重复,直到这个元素小于新的栈顶元素了,我们再接着把这个元素入栈。

这样就保持了栈内有序,并且遍历数组完毕之后,我们也找到了每个数的下一个更大元素。

我们入栈的是数组的下标,这样就可以计算出下一个更大数的距离了,并且我们也可以通过下标来获取到对应的值。

代码:

class Solution {
public:
    vector dailyTemperatures(vector& temperatures) {
        vectorres(temperatures.size(),0);  //一律先初始化为0,有更高气温出现再修改
        vectorstack;   //vector模拟栈
        for(int i=0;itemperatures[*(stack.end()-1)]){
                    int last=*(stack.end()-1);
                    res[last]=i-last;
                    stack.pop_back();
                }
                stack.push_back(i);
            }
        }
        return res;
    }
};

你可能感兴趣的:(LeetCode75题解,算法,leetcode,数据结构,c++)