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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴俊灿 中级黑马   /  2016-3-13 22:37  /  541 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

0-99共100个整数,放到一个数组中,位置是随机的将其中一个数37,挑出来,
        换成不是这个数字的另一个数45,(意思就是说 现在0-99这100个数中 37是重复的,而45呢有两个)
        这100个数里面有一个数字是重复的,还有一个数字是没有的,将这个重复的数字找出来,用最快的方式
        (提示:用数据结构的思想。如果想不出来就用自己的想法做)


/*
*         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;

    }
}

2 个回复

倒序浏览
学习了
回复 使用道具 举报
不明觉厉···还没学数据结构
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马