A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始



/*
*     0-99共100个整数,放到一个数组中,位置是随机的
*    将其中一个数37,挑出来,换成不是这个数字的另一个数45
*    有一个数字是重复的,还有一个数字是没有的
*    将这个重复的数字找出来,用最快的方式
*/
public class Demo1 {
    public static void main(String[] args) {

        //定义一个100长度的数组
        int[] arr = new int[100];

        //从1-100初始化
        for (int i = 0; i <100; i++) {
            arr[i]=i;
        }

        //把37换成45,那么这100个数中,37是没有的,45是重复的
        arr[37]=45;

        //打乱数组的里面的值的位置,让位置随机
        changePosition(arr);



        //定义一个临时数组,那么里面的初始数都是0
        int[] temp = new int[arr.length];

        //遍历数组arr,以arr里面的值作为临时数组temp的索引
        for(int i = 0;i<arr.length;i++){
            //让临时数组temp对应的值都加1 ,这时候 temp的索引是0-99,temp对应索引37位置上就是0,对应45位置上就是2
            temp[arr[i]]++;

            //数值是2的则重复,因为 temp的索引45位置上加了两次
            if(temp[arr[i]]==2){
                System.out.println(arr[i]+"重复");
            }
        }

    }

    /**
     * 打算数组的顺序
     * @param arr    需要打乱顺序的数组
     */
    public static void changePosition(int[] arr) {

        Random random = new Random();
        int length = arr.length;
        for(int index=length-1; index>=0; index--) {

            //从0到index处之间随机取一个值,跟index处的元素交换

            exchange(arr, random.nextInt(index+1), index);

        }

    }



    /**
     * 交换数组中的两个数的位置
     * @param arr     需要交换位置的数组
     * @param p1    被交换位置的索引
     * @param p2    被交换位置的索引
     */
    public static void exchange(int[] arr, int p1, int p2) {

        int temp = arr[p1];

        arr[p1] = arr[p2];

        arr[p2] = temp;

    }
}

评分

参与人数 1黑马币 +2 收起 理由
洋葱头头 + 2

查看全部评分

2 个回复

倒序浏览
帮你顶一个
回复 使用道具 举报
帮顶{:2_36:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马