Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Nhiệt độ hàng ngày (Daily Temperatures) trong C++

Cho mảng nhiệt độ T, tính số ngày phải chờ đến ngày ấm hơn tiếp theo.

Ví dụ

T = [73, 74, 75, 71, 69, 72, 76, 73]

Output: [1, 1, 4, 2, 1, 1, 0, 0]

Giải thích: Ngày 0 (73) → ngày 1 (74) ấm hơn: 1 ngày. Ngày 6 (76) nóng nhất → 0.

Cách tiếp cận: Stack

  • Stack lưu index ngày
  • Duyệt mảng, nếu T[stack.top()] < T[i] → pop, ans[popped] = i - popped
  • Push i vào stack

Code C++

#include <bits/stdc++.h>
using namespace std;

void dailyTemp(int* T, int n) {
    stack 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;
}

Kết quả

1 1 4 2 1 1 0 0