在 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 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告