हमें एक ऐरे दिया गया है, मान लीजिए arr[] पूर्णांक तत्वों का किसी भी दिए गए आकार का और एक पॉजिटिव इंटीजर k, और कार्य उन तत्व जोड़ों की गिनती करना है जिनका निरपेक्ष अंतर दिए गए इंटीजर k से अधिक नहीं है।
ऐरे एक प्रकार की डेटा संरचना है जो एक ही प्रकार के तत्वों का निश्चित आकार का अनुक्रमिक संग्रह स्टोर कर सकती है।
उदाहरण
इनपुट: arr[] = {2, 3, 6, 12, 14}, k = 5
आउटपुट: गिनती = 3
व्याख्या: अधिकतम निरपेक्ष अंतर 5 से अधिक न होने वाले जोड़े: (2,3), (2,6), (3,6) यानी {2, 3, 6} इसलिए गिनती 3 है।
इनपुट: arr[] = {2, 3, 6, 12, 14}, k = 10
आउटपुट: गिनती = 4
व्याख्या: जोड़े: (2,3), (2,6), (3,6), (2,12), (3,12), (6,12) यानी {2, 3, 6, 12} इसलिए अधिकतम तत्व 4 हैं।
इनपुट: arr[] = {2, 3, 6, 12, 14}, k = 0
आउटपुट: गिनती = 0
व्याख्या: कोई जोड़ा नहीं जिसका अंतर 0 हो।
उपयोग किया गया दृष्टिकोण
- ऐरे
arr[]और पॉजिटिव इंटीजरkबनाएं। length()फंक्शन का उपयोग करके ऐरे की लंबाई कैलकुलेट करें।- एक अस्थायी वेरिएबल लें जो तत्वों की गिनती स्टोर करेगा।
- दो अस्थायी वेरिएबल
firstऔरlastघोषित करें और 0 से इनिशियलाइज़ करें। - ऐरे को सॉर्ट करने के लिए
sortमेथड कॉल करें। i = 0सेsize-1तक लूप शुरू करें।- लूप के अंदर,
while j < size AND arr[j] <= arr[i] + kशुरू करें। - व्हाइल के अंदर, जांचें
IF count < j-iतोcount = j-iसेट करें औरfirst = i, last = j। - गिनती लौटाएं।
- परिणाम प्रिंट करें।
C++ कार्यान्वयन
#include <iostream>
#include <algorithm>
using namespace std;
int countmax(int arr[], int size, int K) {
int result = 0;
int i = 0, j = 0;
int beg = 0, end = 0;
// ऐरे को सॉर्ट करें
sort(arr, arr + size);
// अधिकतम तत्व खोजें
for (i = 0; i < size; i++) {
// उन सभी तत्वों को गिनें जो रेंज में हैं
while (j < size && arr[j] <= arr[i] + K)
j++;
if (result < (j - i)) {
result = (j - i);
beg = i;
end = j;
}
}
// अधिकतम गिनती लौटाएं
return result;
}
int main() {
int arr[] = {2, 3, 6, 12, 14};
int size = sizeof(arr) / sizeof(arr[0]);
int K = 5;
cout << "count is " << countmax(arr, size, K) << endl;
return 0;
}
आउटपुट
count is 3