题目:

乱序输出N个数,可使用数组实现。

解题思路:

需要考虑两点:

  • 随机取
    想到乱序就想到了随机,随机就可以使用Random,使用Random的取值范围为:[0,arr.length-1],得到的数就是数组的下标。
  • 不重复
    随机取已经通过Random解决,那么如何保证不重复? 每取出一个数后,就把当前Random的取值范围最后一个下标所对应的元素覆盖上去,然后下一轮Random的取值范围-1

例如:

一个数组:

int[] arry = new int{1,2,3,4,5};
  1. 根据取值范围:0 <= random <= 4 ,假设得到随机数 3
  2. 取出下标为 3 的元素后,把该元素的值修改为下标为4的元素的值。
  3. >>>>此时取出的元素为: {4} , arry的值为{1,2,3,5,5}
  4. 此时,random的取值范围为:0 <= random <= 3

使用这种方式,成功的避免了取值元素重复的问题。

代码

    public static int[] shuffle(int[] arr){
        int[] arr2 = new int[arr.length];
        for (int i=0;i<arr.length;i++){
            Random random = new Random();
            int temp = random.nextInt(arr.length-i);
            arr2[i]=arr[temp];
            arr[temp]=arr[arr.length-i-1];
        }
        return arr2;

    }


    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6};
        for (int i: shuffle(arr)) {
            System.out.println(i);
        }
    }

标签: none

添加新评论