在C ++中,删除时间> =等待时间时,从数组中最大删除

在这个问题上,我们得到了N个元素的数组。我们的任务是在删除时间> =等待时间时从数组中找到最大删除量。

因此,这里我们将删除数组的元素。数组元素的值表示删除时间(从数组中删除元素所花费的时间)。

元素有一个等待时间,这是它必须等待直到被删除的时间。

仅当删除时间大于必须等待的时间时,才可以删除该元素

我们必须找到可以从数组中删除的最大元素数。数组中元素的顺序可以根据要求进行更改。

让我们举个例子来了解这个问题,

输入-数组= {12,3,11,7,5}

输出-2

说明-

首先,我们将数组重新排序为升序-

数组将为{3,5,7,11,12}

现在,我们将一一删除元素

移除3-等待时间为0,小于移除时间(3)。可以拆卸。

移除5-等待时间为3,小于移除时间(5)。可以拆卸。

移除7-等待时间为8,大于移除时间(7)。无法移除。

为了解决这个问题,我们将逐一排序并删除检查元素。

算法

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