C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で参加できるイベントの最大数


events [i] =[startDayi、endDayi]であるイベントの配列があるとします。ここで、私がstartDayiで開始し、endDayiで終了するすべてのイベント。範囲startTimeiとendTimei(両方を含む)のdである任意の日dにイベントIに参加できます。一度に参加できるイベントは1つだけであることに注意する必要があります。だから私たちが参加できるイベントの最大数を見つけてください。したがって、たとえば、入力が[[1,4]、[4,4]、[2,2]、[3,4]、[1,1]]の場合、出力は1になります。 [1、1]、[2、2]、[3、4]、[4、4]の最大4つのイベントに参加できます。

これを解決するには、次の手順に従います-

  • n:=イベントの数、開始日に基づいてイベントリストを並べ替え、ret:=0およびitr:=0

    を設定します。
  • pqと呼ばれるmax-heapに基づいて優先キューを作成します

  • 1から10000の範囲のIの場合

    • itr

      • イベントを挿入[itr、1]

      • itrを1増やします

    • pqが空ではなく、pqの先頭

      • pqから要素を削除する

    • pqが空でない場合は、pqから削除し、retを1増やします

  • retを返す

例(C ++)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   static bool cmp(vector <int>& a, vector <int>& b){
      return a[0] < b[0];
   }
   int maxEvents(vector<vector<int>>& events) {
      int n = events.size();
      sort(events.begin(), events.end(), cmp);
      int ret = 0;
      int itr = 0;
      priority_queue <int, vector <int>, greater <int>> pq;
      for(int i = 1; i <= 1e5; i++){
         while(itr < n && events[itr][0] == i){
            pq.push(events[itr][1]);
            itr++;
         }
         while(!pq.empty() && pq.top() < i) pq.pop();
         if(!pq.empty()){
            pq.pop();
            ret++;
         }
      }
      return ret;
   }
};
main(){
   vector<vector<int>> v = {{1,4},{4,4},{2,2},{3,4},{1,1}};
   Solution ob;
   cout << (ob.maxEvents(v));
}

入力

[[1,4],[4,4],[2,2],[3,4],[1,1]]

出力

4

  1. C++でNセグメントを使用して7セグメントディスプレイに表示できる最大数

    与えられたタスクは、7セグメントディスプレイのant番号でNセグメントを使用して表示できる最大数を見つけることです。 例を使用して、私たちがしなければならないことを理解しましょう- 入力 − n =5 出力 − 71 説明 −最大数は7セグメントディスプレイに次のように表示されます- 入力 − n =6 出力 − 111 以下のプログラムで使用されるアプローチは次のとおりです 次の状況は3つのケースに分けることができます- ケース1 − Nが0または1の場合、数値を表示することはできません。 ケース2 − Nが奇数の場合。その場合、奇数

  2. C++で直角二等辺三角形に収まる正方形の最大数

    与えられたタスクは、底辺が「s」の二等辺三角形の中に収まる、辺が「a」の正方形の最大数を見つけることです(二等辺三角形には少なくとも2つの等しい辺があります)。 例を使用して、私たちがしなければならないことを理解しましょう: 入力 s=5, a=1 出力 10 説明 −基数の平方数は、sをaで割り、1を引くことで計算できます。したがって、基数の平方数=5/1 – 1 =4 同様に、下の4つの正方形を配置すると、base(s-a)の新しい二等辺三角形が得られます。次に同じ手順を繰り返して3つの正方形を取得し、1つの正方形が上に配置されるまで続けます。 入力 s=7, a=2 出力