এই সমস্যায়, আমাদের একটি অ্যারে অ্যারে[] আকারের N এবং একটি পূর্ণসংখ্যার মান দেওয়া হয়েছে। আমাদের কাজ হল অ্যারে থেকে শেষ সরানো উপাদানটির অবস্থান খুঁজে পাওয়া .
অ্যারে থেকে মান অপসারণ অপারেশন −
এর উপর ভিত্তি করে- অ্যারে arr[i]-এর একটি উপাদানের জন্য। যদি arr[i]> M হয়, মানটি পপ করুন এবং অ্যারের শেষে arr[i] - M চাপুন। অন্যথায় অ্যারে থেকে এটি সরান৷
যতক্ষণ না অ্যারেটিতে উপাদান থাকে ততক্ষণ ক্রিয়াকলাপ সম্পাদন করুন।
সমস্যাটি বোঝার জন্য একটি উদাহরণ নেওয়া যাক,
ইনপুট
arr[] = {5, 4, 8}, M = 3
আউটপুট
3
ব্যাখ্যা
Removing values using operations, {5, 4, 8} -> {4, 8, 2} -> {8, 1, 2} -> {1, 2, 5} -> {2, 5} -> {5} -> {2} -> empty array. The last value removed is 8, position is 3.
সমাধান পদ্ধতি
সমস্যার একটি সহজ সমাধান হল এই সত্যটি ব্যবহার করে যে শেষটি অপসারণ করা হবে তা খুঁজে বের করা যে প্রতিটি মান যেটি সর্বশেষে সরানো হবে তার সবচেয়ে বড় মান রয়েছে ceil(arr[i] / M) .
অ্যারে থেকে শেষ পর্যন্ত বেরিয়ে আসা উপাদানগুলির অবস্থান খুঁজে বের করতে, আমরা অ্যারেটি অতিক্রম করব এবং ceil(arr[i] / M) এর সর্বাধিক মান সহ অবস্থানটি সংরক্ষণ করব। .
উদাহরণ
আমাদের সমাধানের কাজ চিত্রিত করার জন্য প্রোগ্রাম
#include <iostream> using namespace std; int findLastRemPos(int arr[], int n, int m){ for (int i = 0; i < n; i++) { arr[i] = (arr[i] / m + (arr[i] % m != 0)); } int lastRemPos = -1, largestVal = -1; for (int i = n - 1; i >= 0; i--) { if (largestVal < arr[i]) { largestVal = arr[i]; lastRemPos = i; } } return lastRemPos + 1; } int main(){ int arr[] = {5, 4, 8, 1}; int n = sizeof(arr) / sizeof(arr[0]); int m = 3; cout<<"The position of last removed element in the array is "<<findLastRemPos(arr, n, m); return 0; }
আউটপুট
The position of last removed element in the array is 3