在 C++ 中查找需要移除的盒子数量


在这个问题中,我们给定了一个数组 arr[],其中每个元素代表一堆盒子(每个盒子高度为单位)。我们的任务是查找需要移除的盒子数量

这个人站在数组索引 0 处,位于盒子堆的高度,他需要移动到数组的末尾。从一堆移动到下一堆的条件是跳到下一个。

只有当下一堆的高度相同或低于当前堆的高度时,才能跳跃。如果下一堆的高度更高,则需要移除下一堆中的盒子,直到高度相等。我们需要找到从第一个盒子到最后一个盒子移除的盒子的总数。

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

Input : arr[] = {5, 7, 3 , 1, 2}
Output : 3

解释

最初,这个人位于高度 5 处。

步骤 1 - 要到达高度为 7 的第二个位置,这个人需要移除 2 个盒子。

步骤 2 - 要到达高度为 3 的第三个位置,不需要移除任何盒子。

步骤 3 - 要到达高度为 1 的下一个位置,不需要移除任何盒子。

步骤 4 - 要到达高度为 2 的下一个位置,需要移除一个盒子。这使得移除的盒子总数等于 3。

解决方案方法

解决这个问题的一个简单方法是从头到尾遍历数组,并检查下一个元素是否大于当前元素。如果是,则将其差值添加到boxesRemoved变量中,该变量保存将要移除的盒子的总数。最后,我们将返回boxesRemoved

示例

程序说明我们解决方案的工作原理

#include <iostream>
using namespace std;
int findBoxesRemoved(int arr[], int n){
   int boxesRemoved = 0;
   for (int i = 0; i < n-1; i++) {
      if (arr[i] < arr[i+1])
         boxesRemoved += (arr[i+1] - arr[i]);
   }
   return boxesRemoved;
}
int main(){
   int arr[] = { 5, 7, 3 , 1, 2, 6 };
   int n = sizeof(arr) / sizeof(arr[0]);
   cout<<"The total number of boxes to be removed to reach the end is "<<findBoxesRemoved(arr, n);
   return 0;
}

输出

The total number of boxes to be removed to reach the end is 7

更新于: 2022-01-24

143 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告