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

如何修正代码以找出1~max范围内未出现在无序数组中的数字?

修正方案:找出1~max中缺失的数字

问题分析

你的代码当前是遍历无序数组A,对比1max的有序数组B,找到匹配项就打印,因此输出的是**存在的数字**。要实现打印**缺失数字**的需求,需要反转检查逻辑:遍历1max的所有数字,判断每个数字是否在数组A中,不存在则打印。

基于原代码的修改版本

直接调整循环逻辑和判断条件,保持原有数组对比的思路:

public class Test {
    public static void main(String[] args) {
        // 最大数字范围
        int max = 5;
        // 无序目标数组
        int[] A = {1,2,3,5};
        
        // 创建1~max的有序数组
        int[] B = new int[max];
        int num = 1;
        for (int i = 0; i < max; i++) {
            B[i] = num;
            num++;
        }
        
        // 检查逻辑:遍历有序数组B,判断每个数字是否在A中存在
        for (int j = 0; j < B.length; j++) {
            boolean isExist = false;
            // 遍历A查找当前B中的数字
            for (int i = 0; i < A.length; i++) {
                if (B[j] == A[i]) {
                    isExist = true;
                    break; // 找到匹配项后直接终止内层循环,提升效率
                }
            }
            // 若不存在则打印
            if (!isExist) {
                System.out.println(B[j]);
            }
        }
    }
}

更高效的优化方案

当max或数组A的长度较大时,双重循环的时间复杂度较高(O(n*max))。可以使用HashSet存储数组A的元素,利用集合的O(1)查找特性优化性能:

import java.util.HashSet;
import java.util.Set;

public class Test {
    public static void main(String[] args) {
        int max = 5;
        int[] A = {1,2,3,5};
        
        // 将数组A的元素存入HashSet
        Set<Integer> numSet = new HashSet<>();
        for (int num : A) {
            numSet.add(num);
        }
        
        // 遍历1~max,检查每个数字是否在集合中
        for (int i = 1; i <= max; i++) {
            if (!numSet.contains(i)) {
                System.out.println(i);
            }
        }
    }
}

输出结果

两种方案执行后都会输出:4,符合打印缺失数字的需求。

内容的提问来源于stack exchange,提问作者MHD ALHABEB ALSHALAH

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:46:18