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

Java场景下如何从含重复元素的数组中提取唯一不重复数值

问题逻辑缺口说明

现在写的代码跑完根本拿不到目标结果,核心问题有两个:

  • 双重循环碰到相同元素就直接break,全程没有对元素的重复次数做统计,也没有标记哪些元素是重复出现的
  • 没有任何结果收集、输出逻辑,就算完整跑完所有循环,也不会把符合要求的唯一值取出来
适配当前已写逻辑的优化方案

你已经写了Arrays.sort(list)做数组排序,排序后的数组会变成[3,3,3,5,5,5,5,6,6,9],所有相同值都是连续排列的,完全没必要用O(n²)复杂度的双重循环逐次比对所有元素,直接判断相邻元素就能把重复元素识别出来,把复杂度降到O(n):

  • 遍历排序后的数组,对每个位置的元素做相邻值比对
  • 首尾位置单独判断:首元素只需要和后一个位置比,尾元素只需要和前一个位置比
  • 中间位置的元素只要和前后位置的值都不相等,就是要找的唯一值

对应改完的可运行代码:

import java.util.Arrays;

public class FindSingleUnique {
    public static void main(String[] args) {
        int[] list = {5,3,5,5,5,6,6,9,3,3};
        Arrays.sort(list);
        int target = -1;
        for (int i = 0; i < list.length; i++) {
            if (i == 0) {
                // 数组开头的元素,只需要对比后一位
                if (list[i] != list[i + 1]) {
                    target = list[i];
                    break;
                }
            } else if (i == list.length - 1) {
                // 数组末尾的元素,只需要对比前一位
                if (list[i] != list[i - 1]) {
                    target = list[i];
                    break;
                }
            } else {
                // 中间元素,同时对比前后两位,都不相等就是唯一值
                if (list[i] != list[i - 1] && list[i] != list[i + 1]) {
                    target = list[i];
                    break;
                }
            }
        }
        // 输出结果为预期的9
        System.out.println(target);
    }
}

补充替代方案:如果不想依赖排序逻辑,也可以直接统计每个元素的出现频率,筛选出出现次数为1的值,这种方案不需要提前打乱数组顺序,适配更通用的场景:

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

public class FindUniqueWithCount {
    public static void main(String[] args) {
        int[] list = {5,3,5,5,5,6,6,9,3,3};
        Map<Integer, Long> countResult = Arrays.stream(list)
                .boxed()
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
        // 筛选出出现次数为1的元素,输出为9
        countResult.forEach((num, count) -> {
            if (count == 1) {
                System.out.println(num);
            }
        });
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 03:36:06