You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Java中eliminateDuplicates方法里的-1问题?

解决移除重复元素并剔除-1的问题

你的思路方向是对的——把重复元素标记成-1,但现在需要把这些标记过的元素剔除,返回一个只装不重复值的新数组。按照你听到的建议,我们分几步修改eliminateDuplicates方法:

修改步骤

  • 统计有效元素数量:遍历标记后的数组,数出所有不等于-1的元素个数(记为count),这个数就是新数组的长度。
  • 创建新数组:用count作为长度创建新数组list2,刚好能装下所有不重复的元素。
  • 填充新数组:再次遍历原数组,把所有非-1的元素依次放进新数组。
  • 返回新数组:最后返回这个新数组,替代原来的数组。

修改后的完整代码

import java.util.Scanner;

public class Lab09 {
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);

        System.out.println("Enter ten numbers: ");
        int[] num = new int[10];

        for (int i = 0; i < num.length; i++) {
            num[i] = s.nextInt();
        }
        num = eliminateDuplicates(num);

        System.out.print("The distinct numbers are: ");
        for (int i = 0; i < num.length; i++) {
            System.out.print(num[i] + " ");
        }
        s.close();
    }

    public static int[] eliminateDuplicates(int[] list) {
        // 保留你原来的标记逻辑,新增跳过已标记元素的判断
        for (int i = 0; i < list.length; i++) {
            if (list[i] == -1) {
                continue; // 跳过已经被标记为重复的元素,避免无效检查
            }
            for (int v = i + 1; v < list.length; v++) {
                if (list[i] == list[v]) {
                    list[v] = -1;
                }
            }
        }

        // 统计不重复元素的数量
        int count = 0;
        for (int num : list) {
            if (num != -1) {
                count++;
            }
        }

        // 创建新数组并填充有效元素
        int[] list2 = new int[count];
        int index = 0;
        for (int num : list) {
            if (num != -1) {
                list2[index++] = num;
            }
        }

        return list2;
    }
}

额外说明

  • 新增的if (list[i] == -1) continue;是为了优化:如果某个元素已经被标记为重复(-1),就不用再拿它和后面的元素比较了,减少不必要的循环。
  • 新数组的长度完全匹配不重复元素的数量,所以输出时只会打印有效元素,不会再出现-1。

内容的提问来源于stack exchange,提问作者alana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 18:42:31