ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

LeetCode-每日一题 384. 打乱数组 [Java实现]

2021-11-22 16:02:00  阅读:160  来源: 互联网

标签:Java ints nums int Solution 384 数组 shuffle LeetCode


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

实现 Solution class:

  • Solution(int[] nums) 使用整数数组 nums 初始化对象
  • int[] reset() 重设数组到它的初始状态并返回
  • 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]


方法一:洗牌

        对于数组中的第 i 位,我们在打乱时将其与第 [i, n) 位的数字随机交换值即可做到每个元素都可等概率的出现在每个位置上。

class Solution {
        private final int[] nums;
        private final Random random = new Random();
        private final int n;

        public Solution(int[] nums) {
            this.nums = nums;
            this.n = nums.length;
        }

        public int[] reset() {
            return nums;
        }

        public int[] shuffle() {
            int[] result = nums.clone();
            for (int i = 0; i < n; ++ i)
                swap(result, i, i+random.nextInt(n-i));
            return result;
        }

        private static void swap(int[] ints, int i, int j) {
            int temp = ints[j];
            ints[j] = ints[i];
            ints[i] = temp;
        }

    }

标签:Java,ints,nums,int,Solution,384,数组,shuffle,LeetCode
来源: https://blog.csdn.net/qq_51026595/article/details/121467665

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有