C ++中的每日温度

让我们假设我们有一个代表温度T的正温度数组。任务是计算给定列表中下一个较暖温度的天数。

例如

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

输出:  [1、1、4、2、1、0、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天。