在 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
广告