美文网首页力扣精解
初级算法-设计问题-打乱数组

初级算法-设计问题-打乱数组

作者: coenen | 来源:发表于2021-09-11 07:06 被阅读0次

    给你一个整数数组 nums, 涉及设计算法打乱一个没有重复元素的数组.
    实现

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

    提示:
    nums 中的所有元素都是 唯一的
    最多可以调用 5 * 104 次 reset 和 shuffle

    摘一个示例做个说明.
    示例 1:
    输入
    ["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]
    
    条件分析:
    1. 初始化对象、原数据返回、打乱数据、类定义
    解决思路1:
    1. 根据分析1,采用私有属性进行存储源数据,这样就解决了初始化和原数据返回
    2. 采用新数组承接,返回打乱后的数据
    采用私有属性进行存储源数据,这样就解决了初始化和原数据返回.采用新数组承接,返回打乱后的数据.打乱方式有很多,随机数,set,map等
    class Solution {
        var num: [Int] = []
        
        init(_ nums: [Int]) {
            self.num = nums
        }
        
        // 返回原数据
        func reset() -> [Int] {
            return self.num
        }
        // 返回数组随机打乱后的结果
        func shuffle() -> [Int] {
            var array = self.num
            for i in 0 ..< array.count {
                array.swapAt(i, Int.random(in: i ..< array.count))
            }
            return array
        }
    }
    
    打乱数组 提交结果.jpg

    测试用例:

    let solu = Solution.init([1,2,3,4,5,6,7,8,])
    solu.reset()
    solu.shuffle()
    solu.shuffle()
    solu.shuffle()
    solu.reset()

    考察要点:

    • 数组
    • 数学
    • 随机化

    相关文章

      网友评论

        本文标题:初级算法-设计问题-打乱数组

        本文链接:https://www.haomeiwen.com/subject/qrzgwltx.html