इस समस्या में, हमें आकार N का एक arr [] और एक पूर्णांक मान M दिया जाता है। हमारा कार्य सरणी से अंतिम हटाए गए तत्व की स्थिति का पता लगाना है ।
सरणी से मानों को हटाना संचालन पर आधारित है -
- सरणी में एक तत्व के लिए गिरफ्तार [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