Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

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일차입니다.