博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] 384. Shuffle an Array 数组洗牌
阅读量:4511 次
发布时间:2019-06-08

本文共 2682 字,大约阅读时间需要 8 分钟。

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();

给一个没有重复数字的数组,实现重置和洗牌的功能。

解法:遍历数组每个位置,每次都随机生成一个坐标位置,然后交换当前位置和随机位置的数字,这样如果数组有n个数字,那么也随机交换了n组位置,从而达到了洗牌的目的。

Java:

import java.util.Random;public class Solution {    private int[] nums;    private Random random;    public Solution(int[] nums) {        this.nums = nums;        random = new Random();    }        /** Resets the array to its original configuration and return it. */    public int[] reset() {        return nums;    }        /** Returns a random shuffling of the array. */    public int[] shuffle() {        if(nums == null) return null;        int[] a = nums.clone();        for(int j = 1; j < a.length; j++) {            int i = random.nextInt(j + 1);            swap(a, i, j);        }        return a;    }        private void swap(int[] a, int i, int j) {        int t = a[i];        a[i] = a[j];        a[j] = t;    }}  

Python:

import randomclass Solution(object):    def __init__(self, nums):        """        :type nums: List[int]        :type size: int        """        self.__nums = nums    def reset(self):        """        Resets the array to its original configuration and return it.        :rtype: List[int]        """        return self.__nums    def shuffle(self):        """        Returns a random shuffling of the array.        :rtype: List[int]        """        nums = list(self.__nums)        for i in xrange(len(nums)):            j = random.randint(i, len(nums)-1)            nums[i], nums[j] = nums[j], nums[i]        return nums# Your Solution object will be instantiated and called as such:# obj = Solution(nums)# param_1 = obj.reset()# param_2 = obj.shuffle()  

C++:

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

  

 

 

转载于:https://www.cnblogs.com/lightwindy/p/9739181.html

你可能感兴趣的文章
Durid数据库连接池配置(不使用框架)
查看>>
BarCode128B字符转换函数(PB,SQL)
查看>>
watir学习资料
查看>>
Jmeter属性和变量
查看>>
java并发编程:并发容器之CopyOnWriteArrayList(转)
查看>>
python基础——面向对象进阶下
查看>>
Linux vi 命令详解
查看>>
本地如何搭建IPv6环境测试你的APP
查看>>
oracle、mysql新增字段,字段存在则不处理
查看>>
C++ NULL与nullptr的区别
查看>>
Discretized Streams, 离散化的流数据处理
查看>>
Spark源码分析 – SchedulerBackend
查看>>
黑马程序员 Java输入\输出
查看>>
python字符串处理
查看>>
live555学习笔记4-计划任务(TaskScheduler)深入探讨
查看>>
【Unity3D】获取鼠标在三维空间(世界坐标系)的位置
查看>>
Python虚拟机函数机制之名字空间(二)
查看>>
线段树
查看>>
SharePoint2010联合搜索——Google、百度
查看>>
php静态
查看>>