我正在尝试从arraylist中删除所有不唯一的数字。我必须在不增加超过o(1)个空间的情况下这样做。这是我的密码:
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);
}
我的代码正在删除除两个12以外的所有副本。我不知道这个边缘的案子我遗漏了什么。请帮忙。
2条答案
按热度按时间rks48beu1#
您可以在一行中删除列表中的所有重复项:
在线试用
polkgigr2#
要删除排序数组中的重复项,只需将唯一元素移动到数组的左侧部分,然后删除其余部分:
可运行版本:https://ideone.com/hohmye