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