इस समस्या में, हमें पूर्णांक तत्वों का एक सरणी गिरफ्तारी [] दिया जाता है। हमारा काम एक ही सरणी में प्रत्येक तत्व के तल को खोजने के लिए एक प्रोग्राम बनाना है। यदि किसी तत्व का तल मौजूद है, तो हम फर्श को प्रिंट करेंगे अन्यथा प्रिंट -1।
सरणी में किसी तत्व का तल निकटतम तत्व है जो सरणी में तत्व से छोटा या उसके बराबर है।
समस्या को समझने के लिए एक उदाहरण लेते हैं
Input: arr[] = {3, 1, 5 ,7, 8, 2} Output: 2 -1 3 5 7 1
समाधान दृष्टिकोण
नेस्टेड लूप का उपयोग करके समस्या को हल करने का एक तरीका है। सरणी के प्रत्येक तत्व को लूप करने के लिए एक और सरणी में तत्व के तल को खोजने के लिए आंतरिक एक।
समस्या को हल करने के लिए एक और तरीका क्रमबद्ध सरणी को स्टोर करने के लिए एक अतिरिक्त सरणी का उपयोग कर रहा है। फिर उस मूल सरणी पर लूप करें और बाइनरी खोज एल्गोरिथम का उपयोग करके क्रमबद्ध सरणी में तत्व के तल को खोजें।
उदाहरण
हमारे समाधान की कार्यप्रणाली को दर्शाने के लिए कार्यक्रम
#include <bits/stdc++.h> using namespace std; void printFloorEle(int arr[], int n){ vector<int> sortedArr(arr, arr + n); sort(sortedArr.begin(), sortedArr.end()); for (int i = 0; i < n; i++) { if (arr[i] == sortedArr[0]) { if (arr[i] == sortedArr[1]) cout<<arr[i]; else cout<<-1; cout<<"\t"; continue; } auto iterator = lower_bound(sortedArr.begin(),sortedArr.end(), arr[i]); if (iterator != sortedArr.end() && *(iterator + 1) == arr[i]) cout<<arr[i]<<"\t"; else cout<<*(iterator - 1)<<"\t"; } } int main(){ int arr[] = { 3, 1, 5 ,7, 8, 2 }; int n = sizeof(arr) / sizeof(arr[0]); cout<<"The Floor of every element of the given array is "; printFloorEle(arr, n); return 0; }
आउटपुट
The Floor of every element of the given array is 2 -1 3 5 7 1. है