C++每日溫度


假設我們有一個表示溫度T的正溫度陣列。任務是計算給定列表中下一個較高溫度的天數。

例如

輸入-1:T = [ 73, 74, 75, 71, 69, 72, 76, 73]

輸出:[1, 1, 4, 2, 1 ,1 ,0 ,0]

說明:在給定的溫度列表[73, 74, 75, 71, 69, 72, 76, 73]中,下一個更高的溫度在第1天。同樣,第6天是所有溫度中最暖和的一天,因此輸出將為[ 1, 1, 4, 2, 1, 1, 0, 0]。

解決此問題的方法

我們有一個溫度列表,我們必須計算從給定溫度開始到下一個更溫暖的天數。

為了解決此問題,我們可以使用棧。最初棧為空,我們將檢查棧頂是否為空,然後壓入溫度。接下來,如果棧頂的溫度小於下一個可用的溫度,則表示它較冷,我們將將其從棧中彈出。

我們將再次檢查棧頂是否具有更高或更溫暖的溫度,然後計算天數並將其從其中減去,並將索引儲存在結果中。

  • 輸入溫度資料。
  • 一個名為dailyTemperature(int *T)的整數函式將溫度陣列作為輸入,並返回下一個最溫暖溫度的列表。
  • 遍歷溫度陣列。
  • 建立一個結果向量或陣列以返回所有溫度的列表。
  • 建立一個空棧,並在檢查top() > T[i]的同時將溫度壓入棧中,然後將其壓入棧中並計算天數。
  • 儲存結果並返回。

示例

即時演示

#include<bits/stdc++.h>
using namespace std;
void dailyTemp(int * T, int n) {
   stack < int > s;
   int ans[n];
   memset(ans, 0, sizeof(ans));
   for (int i = 0; i < n; i++) {
      while (!s.empty() && T[s.top()] < T[i]) {
         int j = s.top();
         s.pop();
         ans[j] = i - j;
      }
      s.push(i);
   }
   for (int i = 0; i < n; i++) {
      cout << ans[i] << " " << ;
   }
}
int main() {
   int n = 8;
   int T[8] = {73, 74, 75, 71, 69, 72, 76, 73};
   dailyTemp(T, n);
   return 0;
}

輸出

執行以上程式碼將生成以下輸出:

1 1 4 2 1 1 0 0

給定溫度中下一個較溫暖的溫度在第4天。

更新於: 2021年2月23日

368 次瀏覽

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告