यहां हम देखेंगे कि अनसॉर्टेड सरणी में फ्लोर (floor) और सील (ceiling) कैसे ढूंढें। फ्लोर मान वह सबसे बड़ा तत्व है जो x से छोटा या बराबर है, और सील मान वह सबसे छोटा मान है जो x से बड़ा है। यदि सरणी A = [5, 6, 8, 9, 6, 5, 5, 6] है, और x=7 है, तो फ्लोर मान 6 है, और सील मान 8 है।
इस समस्या को हल करने के लिए, हम रैखिक खोज दृष्टिकोण का पालन करेंगे। हम सरणी को पार करेंगे और x के संबंध में दो दूरियों को ट्रैक करेंगे।
- x से बड़ा या बराबर तत्व की न्यूनतम दूरी
- x से छोटा या बराबर तत्व की न्यूनतम दूरी
- अंत में, न्यूनतम दूरी वाले तत्व को प्रिंट करें
C++ उदाहरण
#include <iostream>
#include <climits>
using namespace std;
void floorCeilingPair(int arr[], int n, int x) {
int floor_index = -1, ceiling_index = -1;
int floor_dist = INT_MAX, ceil_dist = INT_MAX;
for (int i = 0; i < n; i++) {
if (arr[i] >= x && ceil_dist > (arr[i] - x)) {
ceiling_index = i;
ceil_dist = arr[i] - x;
}
if (arr[i] <= x && floor_dist > (x - arr[i])) {
floor_index = i;
floor_dist = x - arr[i];
}
}
if (floor_dist == INT_MAX) cout << "Floor not found" << endl;
else cout << "Floor value is " << arr[floor_index] << endl;
if (ceil_dist == INT_MAX) cout << "Ceiling not found" << endl;
else cout << "Ceil value is " << arr[ceiling_index] << endl;
}
int main() {
int arr[] = {5, 6, 8, 9, 6, 5, 5, 6};
int n = sizeof(arr) / sizeof(int);
int x = 7;
floorCeilingPair(arr, n, x);
return 0;
}
आउटपुट
Floor value is 6 Ceil value is 8