1-10000这10000个数乱序的写出来,但是其中有个数字写错了(可能重复,或者不是1-10000中的数字),如何快速找出?

本文介绍了一种高效的方法来查找一个包含1到10000个数字的乱序数组中的异常值,该异常值可能是重复的或超出范围的数字。通过使用一个辅助数组记录已出现的数字,可以快速定位到错误的数字。
/**
 * 1-10000这10000个数乱序的写出来,但是其中有个数字写错了(可能重复,或者不是1-10000中的数字),如何快速找出?
 */
package com.java.demo.algorithm;

public class FindNum {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] array = {1,3,2,4,5,6,10,9,8,1};
        System.out.println(findTheErrorNum(array));
    }

    private static String findTheErrorNum(int[] dest){
        int length = dest.length;
        int[] array = new int[length];
        for (int i = 0; i < length; i++) {
            int k = dest[i];
            if (k <= 0 || k > length) {
                //因为前提就是数组中的数字是1-10000,因此当数字小于等于0,或者大于10000时就是错误的数字,直接返回
                return String.valueOf(k);
            }
            if (array[k-1] == 0) {
                array[k-1] = k;
            } else {
                //array中第k个数已经存上值时,当前k是重复的数字,返回
                return String.valueOf(k);
            }
        }
        return "未发现错误的数字!";
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值