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

优化非排序Java数组中查找出现n次元素的实现(去除嵌套循环)

优化方案:去除嵌套循环,满足所有约束条件

下面是优化后的代码,完全符合你的要求:不能排序数组、禁止导入任何类、最多处理99个元素,同时彻底去掉了原代码中嵌套遍历整个数组的低效逻辑:

public class Solution {
    
    public static void main(String args[]) {
        int[] myIntArray = {1,2,6,2,3,3,3,4,5,5};
        int[] result = solution(myIntArray, 1);
        printArray(result);
    }

    public static int[] solution(int[] data, int n) {
        // 最多99个元素,所以最多99个不同值,数组长度设为99足够
        int[] uniqueElements = new int[99];
        int[] counts = new int[99];
        int uniqueCount = 0;

        // 一次遍历统计所有元素的出现次数
        for (int num : data) {
            boolean exists = false;
            // 仅遍历已记录的唯一元素,而非整个原数组
            for (int i = 0; i < uniqueCount; i++) {
                if (uniqueElements[i] == num) {
                    counts[i]++;
                    exists = true;
                    break;
                }
            }
            if (!exists) {
                uniqueElements[uniqueCount] = num;
                counts[uniqueCount] = 1;
                uniqueCount++;
            }
        }

        // 统计符合条件的元素数量
        int resultLen = 0;
        for (int i = 0; i < uniqueCount; i++) {
            if (counts[i] == n) {
                resultLen++;
            }
        }

        // 构建结果数组
        int[] result = new int[resultLen];
        int idx = 0;
        for (int i = 0; i < uniqueCount; i++) {
            if (counts[i] == n) {
                result[idx++] = uniqueElements[i];
            }
        }

        return result;
    }

    // 自定义数组打印方法,替代Arrays.toString
    private static void printArray(int[] arr) {
        System.out.print("[");
        for (int i = 0; i < arr.length; i++) {
            if (i > 0) {
                System.out.print(", ");
            }
            System.out.print(arr[i]);
        }
        System.out.println("]");
    }
}

优化说明:

  • 去掉嵌套全量遍历:原代码中每个元素都要遍历整个数组统计次数,时间复杂度O(n²);优化后仅遍历已记录的唯一元素,实际操作量大幅减少,且避免了嵌套遍历整个原数组的逻辑。
  • 移除依赖:删掉了Arrays的导入,用自定义的printArray方法实现数组打印。
  • 简化逻辑:直接通过统计结果构建目标数组,去掉了原代码中处理零值的冗余步骤,代码更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:35:23