How to remove duplicates from int array in C

3 Answers

0 votes
#include <stdio.h>

int remove_duplicates(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        for (int j = i + 1; j < size; j++) {
            if (arr[i] == arr[j]) {
                // Delete the current duplicate element 
                for (int k = j; k < size - 1; k++) {
                    arr[k] = arr[k + 1];
                }
                size--;
                j--; // don't increment
            }
        }
    }
     
    return size;
}
 
 
int main() {
    int arr[] = {1, 2, 2, 3, 4, 5, 5, 5, 6, 7, 7, 1, 8};
    int size = sizeof(arr)/sizeof(arr[0]);
     
    size = remove_duplicates(arr, size);
     
    for (int i = 0; i < size; i++) {
        printf("%d, ", arr[i]);
    }
 
    return 0;
}
 
 
 
/*
run:
 
1, 2, 3, 4, 5, 6, 7, 8, 
 
*/

 



answered Feb 12, 2019 by avibootz
edited Feb 9, 2024 by avibootz
0 votes
#include <stdio.h>

static void print_arr(int arr[], int arr_size) {
    for (int i = 0; i < arr_size; i++) {
        printf("%2i", arr[i]);
    }
    printf("\n");
}

static int remove_duplicates(int arr[], int arr_size) {
    if (arr_size <= 1) {
        return arr_size;
    }

    int i = 0, j, count = 1;
    
    while (i < arr_size) {
        for (j = i + 1; j < arr_size && arr[i] == arr[j]; j++) {
            printf("for: arr[%i]=%2i arr[%i]=%2i\n", i, arr[i], j, arr[j]);
        }
        if (j < arr_size) {
            arr[count++] = arr[j];
            print_arr(arr, arr_size);
        }
        i = j;
    }

    return count;
}

int main()
{
    int arr[] = {1, 2, 3, 4, 4, 4, 5, 7, 8, 8, 8, 8, 9, 9};    
    int size = sizeof(arr)/sizeof(arr[0]);

    int count = remove_duplicates(arr, size);
    print_arr(arr, count);

    return 0;
}



/*
run:

 1 2 3 4 4 4 5 7 8 8 8 8 9 9
 1 2 3 4 4 4 5 7 8 8 8 8 9 9
 1 2 3 4 4 4 5 7 8 8 8 8 9 9
for: arr[3]= 4 arr[4]= 4
for: arr[3]= 4 arr[5]= 4
 1 2 3 4 5 4 5 7 8 8 8 8 9 9
 1 2 3 4 5 7 5 7 8 8 8 8 9 9
 1 2 3 4 5 7 8 7 8 8 8 8 9 9
for: arr[8]= 8 arr[9]= 8
for: arr[8]= 8 arr[10]= 8
for: arr[8]= 8 arr[11]= 8
 1 2 3 4 5 7 8 9 8 8 8 8 9 9
for: arr[12]= 9 arr[13]= 9
 1 2 3 4 5 7 8 9

*/

 



answered Mar 30, 2019 by avibootz
0 votes
#include <stdio.h>
 
#define SIZE 32 
 
int remove_duplicates(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        for (int j = i + 1; j < size; j++) {
            if (arr[i] == arr[j]) {
                // Delete the current duplicate element 
                for (int k = j; k < size - 1; k++) {
                    arr[k] = arr[k + 1];
                }
                size--;
                j--; // don't increment
            }
        }
    }
     
    return size;
}
 
 
int main() {
    int arr[SIZE] = {5, 9, 1, 1, 0, 1, 1, 5, 8, 7, 7};
    int size = sizeof(arr) / sizeof(arr[0]);
     
    size = remove_duplicates(arr, size);
     
    for (int i = 0; i < size; i++) {
        printf("%d, ", arr[i]);
    }
 
    return 0;
}
 
 
 
/*
run:
 
5, 9, 1, 0, 8, 7, 
 
*/

 



answered Feb 9, 2024 by avibootz

Related questions

3 answers 274 views
1 answer 195 views
1 answer 144 views
2 answers 269 views
1 answer 178 views
1 answer 140 views
140 views asked Feb 9, 2024 by avibootz
...