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 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告