Skip to main content
LeetCode 497, Medium. Topics: Array, Math, Binary Search, Reservoir Sampling, Prefix Sum, Randomized. View on LeetCode. Generate this problem as a practice environment: tested reference solution, 15 parametrized pytest cases, and a playground notebook:

Problem

You are given an array of non-overlapping axis-aligned rectangles rects where rects[i] = [ai, bi, xi, yi] indicates that (ai, bi) is the bottom-left corner point of the ith rectangle and (xi, yi) is the top-right corner point of the ith rectangle. Design an algorithm to pick a random integer point inside the space covered by one of the given rectangles. A point on the perimeter of a rectangle is included in the space covered by the rectangle. Any integer point inside the space covered by one of the given rectangles should be equally likely to be returned. Note that an integer point is a point that has integer coordinates. Implement the Solution class:
  • Solution(int[][] rects) Initializes the object with the given rectangles rects.
  • int[] pick() Returns a random integer point [u, v] inside the space covered by one of the given rectangles.

Examples

Example 1

Constraints

  • 1 <= rects.length <= 100
  • rects[i].length == 4
  • -10^9 <= ai < xi <= 10^9
  • -10^9 <= bi < yi <= 10^9
  • xi - ai <= 2000
  • yi - bi <= 2000
  • All the rectangles do not overlap.
  • At most 10^4 calls will be made to pick.
Follow up: What is the time and space complexity of your solution? Could you do it with O(log n) pick time using binary search?

Solution

Reference implementation from solution.py on GitHub, full suite in test_solution.py:

Complexity

Tags

Last modified on September 7, 2026