【LeetCode739】-每日溫度
阿新 • • 發佈:2021-02-06
技術標籤:LeetCode刷題leetcode棧
實現思想:
藉助了【LeetCode84】-柱狀圖中最大矩形面積的思想,因為該計算也是滿足後進先出的規律,所以選擇用棧來實現,棧裡面儲存的是元素的下標值,只要當前的溫度大於棧頂的元素,就計算兩個下標值的差值,將該計算值作為棧頂元素下標對應的結果,同時將棧頂元素彈出,新的下標值壓入棧中。這麼處理完之後棧中還剩餘的元素一律將計算值賦為0
實現程式碼:
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> dailyTemperatures(vector<int>& T) {
stack<int> s;
vector<int> re(T.size());
s.push(-1);
for (int i = 0;i < T.size();i++) {
while (s.top() != -1 && T[s.top()] < T[i]) {
int cur = s.top();s.pop();
re[cur] = i - cur;
}
s.push(i);
}
while (s.top()!=-1)
{
int cur = s.top();s.pop();
re[cur] = 0;
}
return re;
}
};
int main() {
return 0;
}
提交結果及分析:
時間複雜度和空間複雜度應該都是O(n)