Java 使用O(1)空格从arraylist中删除非唯一编号
我正在尝试从arraylist中删除所有非唯一的数字。我必须在不添加超过O(1)个空间的情况下执行此操作。这是我的密码:Java 使用O(1)空格从arraylist中删除非唯一编号,java,arraylist,duplicates,Java,Arraylist,Duplicates,我正在尝试从arraylist中删除所有非唯一的数字。我必须在不添加超过O(1)个空间的情况下执行此操作。这是我的密码: static ArrayList<Integer> removeDup(ArrayList<Integer> arrayOfNumbers) { Collections.sort(arrayOfNumbers); ArrayList<Integer> singleVals = new ArrayList<Integer&g
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);
}
静态ArrayList removeDup(ArrayList ArrayOfNumber){
集合。排序(ArrayOfNumber);
ArrayList singleVals=新的ArrayList();
布尔值=false;
对于(int i=0;i
我的代码正在删除除两个12之外的所有重复项。我不确定我在这个edge案例中遗漏了什么。请提供帮助。您可以在一行中删除列表中的所有重复项:
List<Integer> removed = list.stream().distinct().collect(Collectors.toList());
List removed=List.stream().distinct().collect(Collectors.toList());
要删除排序数组中的重复项,只需将唯一元素移动到数组的左侧,然后删除其余部分:
static ArrayList<Integer> removeDup(ArrayList<Integer> a) {
Collections.sort(a);
int uniqueCnt = 0;
for (int i = 0; i < a.size(); ++i) {
if ((i == 0 || a.get(i) != a.get(i-1)) && (i+1 == a.size() || a.get(i) != a.get(i+1))) {
a.set(uniqueCnt++, a.get(i));
}
}
a.subList(uniqueCnt, a.size()).clear();
return a;
}
静态ArrayList removeDup(ArrayList a){
收集.分类(a);
int uniqueCnt=0;
对于(int i=0;i
可运行版本:您是否尝试过使用调试器?在迭代时从列表中删除会产生不可预测的行为。最好使用迭代器。@Vasan我以前从未这样做过,你能给我看一下代码吗?和(或“迭代器删除java”的任何匹配项)如何将迭代器值放入原始arraylist?OP提到的是O(1)空间,而不是时间。@Vasan哦,他提到了,我的错。@Vasan O(1)对于这样的问题,时间是不可能的。此代码将删除重复的数字,但不会删除所有重复的数字实例。我只想要没有重复的原始数字。这只是删除了重复的内容。@Jack,对不起,误读了问题。现在它将删除重复项。