https://leetcode-cn.com/probl...python
这道题目很独特,要求返回随机的答案,应该是经过检查答案分布状况来判断是否经过。数组
由于前提是全部矩形不重合。因此能够分为两步作,第一步是随机选择矩形,第二步则是在矩形上随机选点。app
难点在于如何高效的随机选择矩形。能够计算每一个矩形的点数,而后作一个累加的数组,数组第一位是第一个矩形的点数,第 n 位是前 n 个矩形的点数和。dom
而后从 0 到面积和取随机数,看落到那个矩形上,就选哪一个矩形。能够使用二分搜索提升效率。code
import bisect class Solution: def __init__(self, rects: List[List[int]]): self.r = rects self.p = [] cur = 0 for r in rects: cur += (abs(r[2] - r[0])+1) * (abs(r[3] - r[1])+1) self.p.append(cur) def pick(self) -> List[int]: c = random.randint(0, self.p[-1]-1) i = bisect.bisect(self.p, c) x = random.randint(self.r[i][0], self.r[i][2]) y = random.randint(self.r[i][1], self.r[i][3]) return [x, y]
欢迎来个人博客: https://codeplot.top/
个人博客刷题分类:https://codeplot.top/categories/%E5%88%B7%E9%A2%98/leetcode