用o(1)空格从arraylist中删除非唯一的数字

cyej8jka  于 2021-07-09  发布在  Java
关注(0)|答案(2)|浏览(312)

我正在尝试从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以外的所有副本。我不知道这个边缘的案子我遗漏了什么。请帮忙。

rks48beu

rks48beu1#

您可以在一行中删除列表中的所有重复项:

List<Integer> removed = list.stream().distinct().collect(Collectors.toList());

在线试用

polkgigr

polkgigr2#

要删除排序数组中的重复项,只需将唯一元素移动到数组的左侧部分,然后删除其余部分:

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;
}

可运行版本:https://ideone.com/hohmye

相关问题