1. 程式人生 > 其它 >【LeetCode739】-每日溫度

【LeetCode739】-每日溫度

技術標籤: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)