让我们假设我们有一个代表温度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天。