LeetCodeDay23 —— 打家劫舍

384. 打乱数组

描述
  • 打乱一个没有重复元素的数组。
示例
  // 以数字集合 1, 2 和 3 初始化数组。
  int[] nums = {1,2,3};
  Solution solution = new Solution(nums);

  // 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。
  solution.shuffle();

  // 重设数组到它的初始状态[1,2,3]。
  solution.reset();

  // 随机返回数组[1,2,3]打乱后的结果。
  solution.shuffle();
思路
  1. 洗牌算法,每次从当前数组中随机一个元素与末尾元素交换,然后整体长度-1
class Solution {
 public:
  Solution(vector nums) : origin(nums) {}

  /** Resets the array to its original configuration and return it. */
  vector reset() { return origin; }

  /** Returns a random shuffling of the array. */
  vector shuffle() {
    vector res(origin);
    int len = res.size();
    for(int i = 0; i < res.size(); ++i){
      int random = rand() % len;
      int tmp = res[random];
      res[random] = res[--len];
      res[len] = tmp;
    }
    return res;
  }

 private:
  vector origin;
};

/**
 * Your Solution object will be instantiated and called as such:
 * Solution obj = new Solution(nums);
 * vector param_1 = obj.reset();
 * vector param_2 = obj.shuffle();
 */

你可能感兴趣的:(LeetCodeDay23 —— 打家劫舍)