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

削除時間>=C++での待機時間の場合のアレイからの最大削除


この問題では、N個の要素の配列が与えられます。私たちのタスクは、削除時間>=待機時間のときにアレイから最大の削除を見つけることです。

したがって、ここでは配列の要素を削除します。配列の要素の値は、削除時間(配列から要素を削除するのにかかる時間)を示します。

要素には待機時間があります。これは、要素が削除されるまで待機する必要がある時間です。

削除時間が待機時間よりも長い場合にのみ、要素を削除できます。

配列から削除できる要素の最大数を見つける必要があります。配列内の要素の順序は、要件に応じて変更できます。

問題を理解するために例を見てみましょう

入力 −配列={12、3、11、7、5}

出力 − 2

説明

まず、配列を昇順に並べ替えます-

配列は{3、5、7、11、12}

になります

次に、要素を1つずつ削除します

3を削除 −待機時間は0であり、除去時間(3)よりも短くなっています。取り外しが可能です。

5を削除 −待機時間は3で、除去時間(5)よりも短くなります。取り外しが可能です。

7を削除する −待機時間は8であり、除去時間(7)よりも長くなっています。削除できません。

この問題を解決するために、削除する要素を1つずつ並べ替えてチェックします。

アルゴリズム

Step 1: Sort the array in ascending order.
Step 2: For every element in the array, Do:
Step 3: Find waiting Time (sum of removal time of all elements before the element).
Step 4: if (waiting time <= removal time )
   step 4.1: remove the element and increase the remove count.
Step 5: else: break.
Step 6: print the number of elements removed.

削除時間>=C++での待機時間の場合のアレイからの最大削除を見つけるプログラム

#include <bits/stdc++.h>
using namespace std;
int countRemovedElements(int arr[], int n){
   sort(arr, arr + n);
   int removeCount = 0;
   int waitTime = 0;
   for (int i = 0; i < n; i++) {
      if (arr[i] >= waitTime) {
         removeCount++;
         waitTime += arr[i];
      }
      else
         break;
   }
   return removeCount;
}
int main(){
   int arr[] = { 12, 3, 11, 7 , 5 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The maximum number of elements that can be removed from the array is "<<countRemovedElements(arr, n);
   return 0;
}

出力

The maximum number of elements that can be removed from the array is 2

  1. C++での配列の最大平均合計パーティション

    問題の説明 配列が与えられた場合、数値Aの行を最大でK個の隣接する(空でない)グループに分割し、スコアは各グループの平均の合計になります。スコアリングできる最大スコアはいくつですか? 例 入力配列が{9、2、5、3、10}の場合、次のように配列を分割できます- {9} {2、5、3}および{10}の場合、これの平均合計は- 9 +(2 + 5 + 3)/ 3 + 10 =22.33 アルゴリズム この問題を解決するために暗記技術を使用することができます- メモ[i][k]を、A[iからn-1]を最大でK個のパーツに分割する最高のスコアとします 最初のグループでは、A[iからn-1

  2. C++で同じ順序を維持する2つの指定された配列からの最大配列

    問題の説明 2つの同じサイズの配列A[]とB[]が与えられます。タスクは、同じサイズの3番目の配列を形成することです。結果の配列には、両方の配列から最大n個の要素が含まれている必要があります。最初にA[]の要素を選択し、次に元の配列に表示されるのと同じ順序でB[]の要素を選択する必要があります。共通の要素がある場合は、res []に1つの要素のみが存在し、A []が優先される必要があります。 例 入力配列が-の場合 arr1[] = {9, 17, 2, 25, 6} arr2[] = {17, 4, 8, 10, 1} then final array is: {9, 17, 25, 8