LeetCode739:每日温度

    xiaoxiao2023-10-23  182

    根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高的天数。如果之后都不会升高,请输入 0 来代替。

    例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

    提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的都是 [30, 100] 范围内的整数。

    解析:

           刚开始做的时候想错了,一直想着需要把数据和下标结合起来。所以就定义了结构体,越弄越乱。后来参考别人的代码才发现,我可以直接存下标。怎么把这茬给忘了。该题目也算是比较简单的栈的题目,依次将小于栈顶元素的数据的下标压栈。如果有数据比栈顶元素大,则循环弹出栈,并记录天数差,直到条件不符合,直接将新元素压栈,不需要判断。

    代码:

    vector<int> dailyTemperatures(vector<int>& T) { vector<int>res(T.size(), 0); stack<int>sTemp; for (int i = 0; i < T.size(); i++) { while (!sTemp.empty() && T[i] > T[sTemp.top()]) { res[sTemp.top()] = i - sTemp.top(); sTemp.pop(); } //if (sTemp.empty() || T[i] <= T[sTemp.top()])//不需要此判断,因为上边结束后,已经是 //不符合条件的数据了。直接进栈就可以。 sTemp.push(i); } return res; }

     

    最新回复(0)