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

更新于: 2020年6月3日

73 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告