C ++
 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日目です。


  1. C++でのリスのシミュレーション

    木、リス、そしていくつかのナッツがあります。位置は、2Dグリッドのセルで表されます。あなたの目標は、リスがすべてのナッツを集めて、それらを1つずつ木の下に置くための最小距離を見つけることです。リスは一度に最大で1つのナットしかとることができず、隣接するセルに向かって上下左右の4つの方向に移動できます。距離は移動回数で表されます。 したがって、入力が高さ:5幅:7木の位置:[2,2]リス:[4,4]ナッツ:[[3,0]、[2,5]]の場合、出力は12になります。 、 これを解決するには、次の手順に従います- 関数calc()を定義します。これには、x1、y1、x2、y2、が必要で

  2. C++の長方形エリアII

    (軸に沿った)長方形のリストがあるとします。ここで、各rectangle [i] ={x1、y1、x2、y2}です。ここで、(x1、y1)は左下隅のポイントであり、(x2、y2)は右上隅のポイントです。 i番目の長方形。 平面内のすべての長方形でカバーされる総面積を見つける必要があります。答えは非常に大きい可能性があるため、モジュロ10 ^ 9+7を使用できます。 したがって、入力が次のような場合 その場合、出力は6になります。 これを解決するには、次の手順に従います- m =10 ^ 9 + 7 関数add()を定義します。これには、a、b、が必要です。 r