码迷,mamicode.com
首页 > 编程语言 > 详细

[LeetCode] Shuffle an Array 数组洗牌

时间:2016-08-18 12:50:39      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

 

Shuffle a set of numbers without duplicates.

Example:

// Init an array with set 1, 2, and 3.
int[] nums = {1,2,3};
Solution solution = new Solution(nums);

// Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally likely to be returned.
solution.shuffle();

// Resets the array back to its original configuration [1,2,3].
solution.reset();

// Returns the random shuffling of array [1,2,3].
solution.shuffle();

 

这道题让我们给数组洗牌,也就是随机打乱顺序,那么由于之前那道题Linked List Random Node我们接触到了水塘抽样的思想,这道题实际上这道题也是用类似的思路,我们遍历数组每个位置,每次都随机生成一个坐标位置,然后交换当前遍历位置和随机生成的坐标位置的数字,这样如果数组有n个数字,那么我们也随机交换了n组位置,从而达到了洗牌的目的,参见代码如下:

 

class Solution {
public:
    Solution(vector<int> nums): v(nums) {}
    
    /** Resets the array to its original configuration and return it. */
    vector<int> reset() {
        return v;
    }
    
    /** Returns a random shuffling of the array. */
    vector<int> shuffle() {
        vector<int> res = v;
        for (int i = 0; i < res.size(); ++i) {
            int t = rand() % res.size();
            swap(res[i], res[t]);
        }
        return res;
    }
private:
    vector<int> v;
};

 

类似题目:

Linked List Random Node

 

LeetCode All in One 题目讲解汇总(持续更新中...)

[LeetCode] Shuffle an Array 数组洗牌

标签:

原文地址:http://www.cnblogs.com/grandyang/p/5783392.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!