Skip to content

frequency of each element in array

I tried to delete the duplicate value and print the count of each element. But I didn’t get the correct answer. How to delete only the duplicate value and print the count? Here is my code

public class RemoveArray {

    public static int[] delete(int[] arr, int x) {
        int[] sarr = new int[arr.length - 1];
        int j = x;

        for (int i = 0, k = 0; i < arr.length; i++) {
            if (i != j) {
                sarr[k] = arr[i];
                k++;

            }
        }

        return sarr;
    }

    public static void main(String... args) {
        int[] arr = { 1, 2, 8, 3, 2, 2, 2, 1 };

        for (int i = 0; i < arr.length; i++) {
            int count = 1;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    int x = j;
                    count++;
                    arr = delete(arr, x);
                }
            }

            System.out.println(count);
        }
    }

}

I need output as

2
4
1
1

Answer

The problem is that you are removing an element and not updating j accoridngly.

To fix your code, try this:

import java.util.Arrays;

public class removearray {

    static int[] delete(int arr[], int x) {
        int sarr[] = new int[arr.length - 1];
        int j = x;
        for (int i = 0, k = 0; i < arr.length; i++) {
            if (i != j) {
                sarr[k] = arr[i];
                k++;

            }
        }
        return sarr;
    }

    public static void main(String[] args) {
        int arr[] = new int[] { 1, 2, 8, 3, 2, 2, 2, 1 };
        for (int i = 0; i < arr.length; i++) {
            int count = 1;
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    int x = j;
                    count = count + 1;
                    arr = delete(arr, x);
                    j--;
                }
            }

            System.out.println(count);
        }
    }
}