使用java从排序数组中删除重复项

mmvthczy  于 2021-06-27  发布在  Java
关注(0)|答案(3)|浏览(413)

我正在研究leetcode的一个算法问题。但首先我在自己的本地编译器上写下了答案。在本地运行代码时,我可以得到这个问题的答案。但当我把答案直接粘贴到leetcode上的在线编译器中时,系统会提示我答案是错的。与正确答案不符。我的本地编译器的解决方案如下所示:

class Solution {
    public int removeDuplicates(int[] nums) {
        ArrayList<Integer> list = new ArrayList<Integer>();
        ArrayList<Integer> arraylist = new ArrayList<Integer>();

        for (int i : nums) {
            list.add(i);
        }

        for (int num : list) {
            if (!arraylist.contains(num)) {
                arraylist.add(num);
            }
        }

        return arraylist.size();
    }
}

leetcode的反馈:在这里输入图像描述

zbdgwd5y

zbdgwd5y1#

有些评论说可以使用一个集合,但任务是这样做而不需要任何额外的内存分配,最简单的解决方案是:

private static int removeDuplicates(int[] numbers) {
    int size = 0;
    for (int i = 0; i < numbers.length; i++) {
        if (i == 0 || numbers[i - 1] != numbers[i]) {
            numbers[size++] = numbers[i];
        }
    }
    return size;
}
bq8i3lrv

bq8i3lrv2#

不要使用 List , Set , Map ,或者类似的。数据已排序。用那个!
实际上,问问你自己,你的产出是怎样的 [1, 1] ,当您只能返回一个 int 价值观。如何输出只有一个数字的列表/数组?
再看一遍挑战描述,第一句话:
... 在适当的地方移除副本。。。返回新长度。
既然这是你的挑战,我就不写代码了。

mzsu5hc0

mzsu5hc03#

将index设置为1,如果nums[i]与nums[i+1]不同,则按1递增index

class Solution {
    public int removeDuplicates(int[] nums) {

        int index = 1;

        for(int i = 0; i < nums.length - 1; i++){
            if(nums[i] != nums[i + 1]){
                nums[index++] = nums[i + 1];
            }
        }
        return index;

    }
}

相关问题