随机洗牌

随机洗牌

问题

这个题目说的是,给你一个整数数组表示一副牌,你要写一个随机洗牌函数来返回这个数组的一个排列。并且要保证每次返回的排列都是等概率的。假设已经给你一个完美的随机数生成器。

代码

public class AlgoCasts {

  private Random rnd = new Random();

  void swap(int[] nums, int i, int j) {
    int tmp = nums[i];
    nums[i] = nums[j];
    nums[j] = tmp;
  }

  // Time: O(n), Space: O(1)
  public int[] shuffle(int[] nums) {
    for (int i = nums.length - 1; i > 0; --i) {
      int j = rnd.nextInt(i+1);
      swap(nums, i, j);
    }
    return nums;
  }

}

  转载请注明: ForwardXu 随机洗牌

 上一篇
实现平方根函数 实现平方根函数
实现平方根函数问题 这个题目说的是,你要实现一个函数,来计算非负整数 n 的平方根,平方根只需返回整数部分即可。 比如,使用你实现的函数来计算 9 的平方根是 3: f(9) = 3 由于 8 的平方根是 2 点几,使用你实现的函数只需
2018-12-09
下一篇 
单链表中间节点 单链表中间节点
单链表中间节点问题 这个题目说的是,给你一个单链表,你要返回它正中间的节点。如果链表节点数量是偶数个,这个时候正中间有两个节点,你要返回它们中第二个节点。 比如说,给你的单链表是: 0 -> 1 -> 2 -> 4 -> 8 你要返回的
2018-12-09
  目录