• leecode 384. 打乱数组


    给你一个整数数组 nums ,设计算法来打乱一个没有重复元素的数组。

    实现 Solution class:

    1. Solution(int[] nums) 使用整数数组 nums 初始化对象
    2. int[] reset() 重设数组到它的初始状态并返回
    3. int[] shuffle() 返回数组随机打乱后的结果

    示例:

    输入
    ["Solution", "shuffle", "reset", "shuffle"]
    [[[1, 2, 3]], [], [], []]
    输出
    [null, [3, 1, 2], [1, 2, 3], [1, 3, 2]]
    
    解释
    Solution solution = new Solution([1, 2, 3]);
    solution.shuffle();    // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。例如,返回 [3, 1, 2]
    solution.reset();      // 重设数组到它的初始状态 [1, 2, 3] 。返回 [1, 2, 3]
    solution.shuffle();    // 随机返回数组 [1, 2, 3] 打乱后的结果。例如,返回 [1, 3, 2]
    class Solution {
        private int[] array;
        private int[] original;
    
        private Random rand = new Random();
    
        private List<Integer> getArrayCopy() {
            List<Integer> asList = new ArrayList<Integer>();
            for (int i = 0; i < array.length; i++) {
                asList.add(array[i]);
            }
            return asList;
        }
    
        public Solution(int[] nums) {
            array = nums;
            original = nums.clone();
        }
        
        /** Resets the array to its original configuration and return it. */
        public int[] reset() {
            array = original;
            original = original.clone();
            return array;
        }
        
        /** Returns a random shuffling of the array. */
        public int[] shuffle() {
            List<Integer> aux = getArrayCopy();
    
            for (int i = 0; i < array.length; i++) {
                int removeIdx = rand.nextInt(aux.size());
                array[i] = aux.get(removeIdx);
                aux.remove(removeIdx);
            }
            return array;
        }
    }

     感觉下面的代码也满足题意:

    class Solution {
    
        private int[] array;
        private int[] orginal;
        private Random rand = new Random();
    
        public Solution(int[] nums) {
              array = nums;
              orginal = nums.clone();
        }
        
        /** Resets the array to its original configuration and return it. */
        public int[] reset() {
            array = orginal;
            orginal = orginal.clone();
            return array;
    
        }
        
        /** Returns a random shuffling of the array. */
        public int[] shuffle() {
            List<Integer> list = new ArrayList<Integer>();
            for(int i=0;i< array.length;i++)
            {
                list.add(new Integer(array[i]));
            }
    
            Collections.shuffle(list);
    
            for(int i=0;i< array.length;i++)
            {
                array[i] = list.get(i);
            }
            return array;          
        }
    }

     打乱索引就可以了

    class Solution {
        private  int [] original;
        private  List<Integer> list = new ArrayList<Integer>();
        public Solution(int[] nums) {
            original = nums;
            for(int i =0 ;i< nums.length;i++)
            {
                list.add(i);
            }
        }
        
        /** Resets the array to its original configuration and return it. */
        public int[] reset() {
           return  original.clone();
        }
        
        /** Returns a random shuffling of the array. */
        public int[] shuffle() {
            int [] array = new int[list.size()];
            Collections.shuffle(list);
            for(int i= 0;i<list.size();i++)
            {
                array[i] =original[list.get(i)];
            }
            return  array;
        }
    }
  • 相关阅读:
    中国科学院大学数字集成电路作业开源——组合逻辑章节
    中国科学院大学数字集成电路作业开源——时序逻辑与存储器章节
    模拟集成电路实践记录_共源极差分放大器
    中国科学院大学数字集成电路作业开源——64位FFT/IFFT数字逻辑运算电路的Verilog实现
    中国科学院大学数字集成电路作业开源——函数运算器章节
    中国科学院大学数字集成电路作业开源——算数逻辑章节
    【20220306】连岳摘抄
    【20220311】连岳摘抄
    【20220304】连岳摘抄
    【20220312】连岳摘抄
  • 原文地址:https://www.cnblogs.com/kpwong/p/14656804.html
Copyright © 2020-2023  润新知