समस्या
ऐरे से डुप्लीकेट संख्याएं हटाएं। परिणाम ऐरे में केवल यूनिक एलिमेंट्स हों।
एल्गोरिदम
for(i = 0; i < n; i++) {
for(j = i+1; j < n; j++) {
if(a[i] == a[j]) {
// डुप्लीकेट मिला, शिफ्ट करें
for(k = j; k < n; k++)
a[k] = a[k+1];
j--; // इसी इंडेक्स को फिर चेक करें
n--; // ऐरे साइज घटाएं
}
}
}
C प्रोग्राम
#include <stdio.h>
#include <stdlib.h>
int main() {
int a[50], i, j, k, number;
printf("Enter size of array: ");
scanf("%d", &number);
printf("Enter elements: ");
for(i = 0; i < number; i++)
scanf("%d", &a[i]);
printf("Original array: ");
for(i = 0; i < number; i++)
printf("%d ", a[i]);
// डुप्लीकेट हटाएं
for(i = 0; i < number; i++) {
for(j = i+1; j < number; j++) {
if(a[i] == a[j]) {
for(k = j; k < number; k++)
a[k] = a[k+1];
j--;
number--;
}
}
}
printf("\nArray after removing duplicates: ");
for(i = 0; i < number; i++)
printf("%d ", a[i]);
return 0;
}
आउटपुट
Enter size of array: 10 Enter elements: 1 1 2 4 3 5 6 5 7 1 Original array: 1 1 2 4 3 5 6 5 7 1 Array after removing duplicates: 1 2 4 3 5 6 7
समय जटिलता
O(n²) - नेस्टेड लूप्स के कारण। बड़े ऐरे के लिए, सॉर्टिंग + सिंगल पास (O(n log n)) या हैश सेट (O(n)) बेहतर है।
सॉर्टिंग आधारित दृष्टिकोण (अधिक कुशल)
// पहले सॉर्ट करें
qsort(a, n, sizeof(int), compare);
// फिर एडजेसेंट डुप्लीकेट्स हटाएं
int j = 0;
for(i = 1; i < n; i++) {
if(a[i] != a[j])
a[++j] = a[i];
}
n = j + 1;