I was asked in one of the interview that i recently appeared to remove duplicates from unsorted array while still maintaining the order in which they appeared.
For example:
- Input:
int[] nums = [2,1,3,3,2,1,4] - Output shud be
int[] result = [2,1,3,4]
I tried two options one with Hashset and other with list. But i was still wondering if there is an better optimized solution to this. Appreciate if you can help me out NerdyHB
Here is are solution
public static void main(String[] args) {
int[] nums = new int[] { 2, 1, 3, 2, 1 };
List<Integer> result = removeDuplicates(nums);
System.out.println(result);
int[] res = removeDuplicatesUsingHashSet(nums);
System.out.println(Arrays.toString(res));
}
public static List<Integer> removeDuplicates(int[] nums) {
List<Integer> result = new ArrayList<>();
for (int n : nums) {
if (!result.contains(n)) {
result.add(n);
}
}
return result;
}
public static int[] removeDuplicatesUsingHashSet(int[] nums) {
HashSet<Integer> hset = new HashSet<>();
for (int n : nums) {
hset.add(n);
}
int[] result = new int[hset.size()];
int counter = 0;
Iterator<Integer> itr = hset.iterator();
while (itr.hasNext()) {
result[counter++] = itr.next();
}
return result;
}