इस समस्या में, हमें पूर्णांक मानों का एक ऐरे दिया गया है। हमारा कार्य ऐरे के सभी विशिष्ट एलिमेंट्स प्रिंट करना है। आउटपुट में केवल विशिष्ट मान होने चाहिए।
उदाहरण
Input: array = {1, 5, 7, 12, 1, 6, 10, 7, 5}
Output: 1 5 7 12 6 10
विधि 1: नेस्टेड लूप (O(n²))
इस समस्या को हल करने के लिए, हमें ऐरे के एलिमेंट्स की विशिष्टता की जांच करनी होगी। इसके लिए, हम दो नेस्टेड लूप का उपयोग करेंगे। बाहरी लूप मान लेगा और आंतरिक लूप उसके साथ बाकी मानों की जांच करेगा। यदि एक से अधिक मान मौजूद हैं तो केवल एक प्रिंट करें।
#include <iostream>
using namespace std;
void printDistinctValues(int arr[], int n) {
for (int i = 0; i < n; i++) {
int j;
for (j = 0; j < i; j++)
if (arr[i] == arr[j])
break;
if (i == j)
cout << arr[i] << "\t";
}
}
int main() {
int arr[] = {1, 5, 7, 12, 1, 6, 10, 7, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Distinct values of the array are :\n";
printDistinctValues(arr, n);
return 0;
}
आउटपुट
Distinct elements of the array are - 1 5 6 7 10 12
यह समाधान आसान है लेकिन दो लूप का उपयोग करता है जिससे इसकी कॉम्प्लेक्सिटी n² क्रम की होती है।
विधि 2: सॉर्टिंग का उपयोग करके (O(n log n))
एक अधिक कुशल विधि सॉर्टिंग का उपयोग करना होगी। सॉर्टेड ऐरे में, समान संख्याओं की घटनाएं लगातार हो जाती हैं। अब, हम विशिष्ट एलिमेंट्स को आसानी से प्रिंट कर सकते हैं और यह कम स्पेस लेता है।
#include <bits/stdc++.h>
using namespace std;
void printDistinctElements(int arr[], int n) {
sort(arr, arr + n);
for (int i = 0; i < n; i++) {
while (i < n-1 && arr[i] == arr[i+1])
i++;
cout << arr[i] << "\t";
}
}
int main() {
int arr[] = {1, 5, 7, 12, 1, 6, 10, 7, 5};
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Distinct elements of the array are :\n";
printDistinctElements(arr, n);
return 0;
}
आउटपुट
Distinct elements of the array are - 1 5 6 7 10 12
विधि 3: विज़िटेड सेट का उपयोग करके (O(n))
एक और अधिक प्रभावी समाधान विज़िटेड एलिमेंट्स को ट्रैक करके है। हम ऐरे को पार करेंगे और ऐरे के सभी विज़िटेड एलिमेंट्स का ट्रैक रखेंगे।
#include<bits/stdc++.h>
using namespace std;
void printDistinctElements(int arr[], int n) {
unordered_set<int> visited;
for (int i = 0; i < n; i++) {
if (visited.find(arr[i]) == visited.end()) {
visited.insert(arr[i]);
cout << arr[i] << "\t";
}
}
}
int main() {
int arr[] = {1, 5, 7, 12, 1, 6, 10, 7, 5};
int n = 7;
cout << "Distinct numbers of the array are :\n";
printDistinctElements(arr, n);
return 0;
}
आउटपुट
Distinct numbers of the array are - 1 5 7 12 6 10