Leetcode-cn.com 2021-11-27
🟡 519.random-flip-matrix
🏷️ Tags
#reservoir_sampling #hash_table #math #randomized
Description
给你一个
尽量最少调用内置的随机函数,并且优化时间和空间复杂度。
实现
Example
🟡 519.random-flip-matrix
🏷️ Tags
#reservoir_sampling #hash_table #math #randomized
Description
给你一个
m x n 的二元矩阵 matrix ,且所有值被初始化为 0 。请你设计一个算法,随机选取一个满足 matrix[i][j] == 0 的下标 (i, j) ,并将它的值变为 1 。所有满足 matrix[i][j] == 0 的下标 (i, j) 被选取的概率应当均等。尽量最少调用内置的随机函数,并且优化时间和空间复杂度。
实现
Solution 类:Solution(int m, int n) 使用二元矩阵的大小 m 和 n 初始化该对象int[] flip() 返回一个满足 matrix[i][j] == 0 的随机下标 [i, j] ,并将其对应格子中的值变为 1void reset() 将矩阵中所有的值重置为 0Example
输入
["Solution", "flip", "flip", "flip", "reset", "flip"]
[[3, 1], [], [], [], [], []]
输出
[null, [1, 0], [2, 0], [0, 0], null, [2, 0]]
解释
Solution solution = new Solution(3, 1);
solution.flip(); // 返回 [1, 0],此时返回 [0,0]、[1,0] 和 [2,0] 的概率应当相同
solution.flip(); // 返回 [2, 0],因为 [1,0] 已经返回过了,此时返回 [2,0] 和 [0,0] 的概率应当相同
solution.flip(); // 返回 [0, 0],根据前面已经返回过的下标,此时只能返回 [0,0]
solution.reset(); // 所有值都重置为 0 ,并可以再次选择下标返回
solution.flip(); // 返回 [2, 0],此时返回 [0,0]、[1,0] 和 [2,0] 的概率应当相同
Leetcode-cn.com 2022-01-16
🟡 382.linked-list-random-node
🏷️ Tags
#reservoir_sampling #linked_list #math #randomized
Description
给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。
实现
Example
🟡 382.linked-list-random-node
🏷️ Tags
#reservoir_sampling #linked_list #math #randomized
Description
给你一个单链表,随机选择链表的一个节点,并返回相应的节点值。每个节点 被选中的概率一样 。
实现
Solution 类:Solution(ListNode head) 使用整数数组初始化对象。int getRandom() 从链表中随机选择一个节点并返回该节点的值。链表中所有节点被选中的概率相等。Example
输入
["Solution", "getRandom", "getRandom", "getRandom", "getRandom", "getRandom"]
[[[1, 2, 3]], [], [], [], [], []]
输出
[null, 1, 3, 2, 2, 3]
解释
Solution solution = new Solution([1, 2, 3]);
solution.getRandom(); // 返回 1
solution.getRandom(); // 返回 3
solution.getRandom(); // 返回 2
solution.getRandom(); // 返回 2
solution.getRandom(); // 返回 3
// getRandom() 方法应随机返回 1、2、3中的一个,每个元素被返回的概率相等。
Leetcode-cn.com 2022-06-09
🟡 497.random-point-in-non-overlapping-rectangles
🏷️ Tags
#reservoir_sampling #math #binary_search #ordered_set #prefix_sum #randomized
Description
给定一个由非重叠的轴对齐矩形的数组
在一个给定的矩形覆盖的空间内任何整数点都有可能被返回。
请注意 ,整数点是具有整数坐标的点。
实现
Example
🟡 497.random-point-in-non-overlapping-rectangles
🏷️ Tags
#reservoir_sampling #math #binary_search #ordered_set #prefix_sum #randomized
Description
给定一个由非重叠的轴对齐矩形的数组
rects ,其中 rects[i] = [ai, bi, xi, yi] 表示 (ai, bi) 是第 i 个矩形的左下角点,(xi, yi) 是第 i 个矩形的右上角角点。设计一个算法来随机挑选一个被某一矩形覆盖的整数点。矩形周长上的点也算做是被矩形覆盖。所有满足要求的点必须等概率被返回。在一个给定的矩形覆盖的空间内任何整数点都有可能被返回。
请注意 ,整数点是具有整数坐标的点。
实现
Solution 类:Solution(int[][] rects) 用给定的矩形数组 rects 初始化对象。int[] pick() 返回一个随机的整数点 [u, v] 在给定的矩形所覆盖的空间内。Example
输入:
["Solution","pick","pick","pick","pick","pick"]
[[[[-2,-2,-1,-1],[1,0,3,0]]],[],[],[],[],[]]
输出:
[null,[-1,-2],[2,0],[-2,-1],[3,0],[-2,-2]
解释:
Solution solution = new Solution([[-2, -2, 1, 1], [2, 2, 4, 6]]);
solution.pick(); // 返回 [1, -2]
solution.pick(); // 返回 [1, -1]
solution.pick(); // 返回 [-1, -2]
solution.pick(); // 返回 [-2, -2]
solution.pick(); // 返回 [0, 0]
382.linked-list-random-node.pdf
67.8 KB
leetcode.com 2023-03-10
🟡382.linked-list-random-node
🏷️ Tags
#linked_list #math #reservoir_sampling #randomized
🟡382.linked-list-random-node
🏷️ Tags
#linked_list #math #reservoir_sampling #randomized