🎯 Overview
Given an array of numbers, remove duplicate elements from this array.
Important concepts to be aware of:
- This problem can be solved using HashSet in Java. Using Set allows us to store unique elements. So we can add all the elements of the array is a Set, and this way our set will have unique elements only.
- This problem can also be solved using String. Store elements as a string, and utilize string.contains(element) to know if already present or not. But this is not a recommended way to solve this problem.
- This problem can also be solved using Frequency Array. Frequency Array is a concept which is very commonly used in different problems.
- In frequency array, we first find out the largest element in the array. Then, we create a new array
frequencyArray
of sizelargestNumber + 1
. Then:
for (int i = 0; i < originalNumberArray.length; i++) {
frequencyArray[originalNumberArray[i]]++;
}
Then in frequencyArray whatever index yields a number > 0, just print that index out. Wherever we have duplicate elements, at those indexes we will have number > 1. All those indexes where we have number == 1, those indexes are unique.
- This problem can also be solved using sorting. Just sort the input array in ascending order. Then using a reference variable = -1, interate and compare if the numbers are getting repeated in the array or not.
I attempted to solve this problem using all these methods below.
🎯 Solving the problem in Java
Problem Statement: Write a Java Program to Remove Duplicate Elements From the Array.
/**
* Problem 7: Write a Java Program to Remove Duplicate Elements From the Array.
*/
public class Problem_7 {
public static void main(String[] args) {
System.out.println("Enter the elements, separated by comma:");
Scanner sc = new Scanner(System.in);
String commaSeparatedString = sc.nextLine();
usingString(commaSeparatedString);
usingFrequencyArray(commaSeparatedString);
usingSorting(commaSeparatedString);
// using HashSet
}
private static void usingSorting(String commaSeparatedString) {
String[] originalNumberStringArray = commaSeparatedString.split(",");
Arrays.sort(originalNumberStringArray);
int[] originalNumberArray = new int[originalNumberStringArray.length];
for (int i = 0; i < originalNumberStringArray.length; i++) {
originalNumberArray[i] = Integer.parseInt(originalNumberStringArray[i]);
}
int prevNumber = -1;
for (int i = 0; i < originalNumberArray.length; i++) {
if (prevNumber != originalNumberArray[i]) {
System.out.print(originalNumberArray[i] + " ");
prevNumber = originalNumberArray[i];
}
}
}
private static void usingFrequencyArray(String commaSeparatedString) {
String[] originalNumberStringArray = commaSeparatedString.split(",");
int[] originalNumberArray = new int[originalNumberStringArray.length];
for (int i = 0; i < originalNumberStringArray.length; i++) {
originalNumberArray[i] = Integer.parseInt(originalNumberStringArray[i]);
}
int largestNumber = 0;
for (int i = 0; i < originalNumberArray.length; i++) {
if (originalNumberArray[i] > largestNumber) {
largestNumber = originalNumberArray[i];
}
}
int[] frequencyArray = new int[largestNumber + 1];
for (int i = 0; i < originalNumberArray.length; i++) {
frequencyArray[originalNumberArray[i]]++;
}
for (int i = 0; i < frequencyArray.length; i++) {
if (frequencyArray[i] > 0) {
System.out.print(i + " ");
}
}
System.out.println();
}
private static void usingString(String commaSeparatedString) {
String[] originalNumberArray = commaSeparatedString.split(",");
String uniqueNumberArrayString = "";
for (int i = 0; i < originalNumberArray.length; i++) {
if (!uniqueNumberArrayString.contains(originalNumberArray[i])) {
if (i != 0) {
uniqueNumberArrayString += ",";
uniqueNumberArrayString += originalNumberArray[i];
} else {
uniqueNumberArrayString += originalNumberArray[i];
}
}
}
System.out.println("Unique numbers are: " + uniqueNumberArrayString);
}
}
Output:
Enter the elements, separated by comma:
1,2,3,3,2,1,4,5,3
Unique numbers are: 1,2,3,4,5
1 2 3 4 5
1 2 3 4 5
Process finished with exit code 0
🎯 Github
Code shared in this post can be found here.