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

如何统计数组唯一值数量?需满足不可修改原数组等约束

解决数组唯一值统计且不修改原数组的问题

你的原代码之所以会修改输入数组,核心问题在于int[] temp = arr;这行只是把原数组的引用赋值给了temp,并没有创建新数组。所以后续对temp元素的修改,本质上就是直接修改原数组的内容,这就违反了“不可修改传入方法的参数数组”的约束。

符合所有约束的解决方案

下面是满足所有要求的代码,既不会修改原数组,也没有使用额外的数据结构,更没有排序:

public int countUnique(int[] arr) {
    int result = 0;
    for (int i = 0; i < arr.length; i++) {
        boolean isUnique = true;
        // 检查当前元素在之前的位置是否已经出现过
        for (int j = 0; j < i; j++) {
            if (arr[i] == arr[j]) {
                isUnique = false;
                break; // 找到重复就提前退出循环,提升效率
            }
        }
        if (isUnique) {
            result++;
        }
    }
    return result;
}

代码逻辑解释

  • 外层循环逐个遍历数组中的每个元素
  • 对于每个元素arr[i],我们只需要检查它在0到i-1的位置是否已经出现过:
    • 如果之前没出现过,说明这是一个新的唯一值,结果计数器加1
    • 如果已经出现过,就跳过这个元素,不计数
  • 整个过程完全不会修改原数组的任何元素,也没有创建额外的数组/字符串等数据结构,更没有排序操作。

示例验证

调用countUnique({1, 0, 1, 0, 1})时:

  • i=0:没有前置元素,判定为唯一值,result=1
  • i=1:和前置元素1不重复,判定为唯一值,result=2
  • i=2:和i=0的元素重复,不计数
  • i=3:和i=1的元素重复,不计数
  • i=4:和i=0的元素重复,不计数
    最终返回结果为2,和预期一致,且原数组保持{1, 0, 1, 0, 1}的初始状态完全不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:04:29