I am trying to remove all numbers that are not unique from an arraylist. I have to do this without adding more than O(1) space. Here is my code:
static ArrayList<Integer> removeDup(ArrayList<Integer> arrayOfNumbers) {
Collections.sort(arrayOfNumbers);
ArrayList<Integer> singleVals = new ArrayList<Integer>();
boolean found = false;
for (int i = 0; i < arrayOfNumbers.size(); i++) {
int temp = arrayOfNumbers.get(i);
for(int j = i+1; j < arrayOfNumbers.size(); j++)
{
if(temp == arrayOfNumbers.get(j))
{
arrayOfNumbers.remove(arrayOfNumbers.get(j));
while(j != arrayOfNumbers.size()-1 && temp == arrayOfNumbers.get(j))
{
arrayOfNumbers.remove(arrayOfNumbers.get(j));
}
if(temp == arrayOfNumbers.get(j))
{
arrayOfNumbers.remove(arrayOfNumbers.get(j));
}
found = true;
}
}
if(found == true)
{
arrayOfNumbers.remove(arrayOfNumbers.get(i));
found = false;
}
}
System.out.println( Arrays.toString(arrayOfNumbers.toArray()));
return arrayOfNumbers;
}
public static void main(String[] args) {
ArrayList<Integer>values = new ArrayList<Integer>();
values.add(1);
values.add(2);
values.add(3);
values.add(4);
values.add(4);
values.add(5);
values.add(6);
values.add(7);
values.add(7);
values.add(8);
values.add(9);
values.add(10);
values.add(11);
values.add(11);
values.add(11);
values.add(11);
values.add(11);
values.add(12);
values.add(12);
values.add(13);
values.add(13);
values.add(13);
values.add(13);
removeDup(values);
}
My code is removing all of the duplicates except the two 12's. I'm not sure what I am missing with this edge case. Please help.