ในปัญหานี้ เราได้รับอาร์เรย์ 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