当前位置: 首页 > 后端技术 > Python

leetcode497.不重叠矩形中的随机点-python解

时间:2023-03-25 20:18:32 Python

https://leetcode-cn.com/probl...这道题很独特,要求返回随机答案,应该通过检查答案分布判断是否通过。因为前提是所有的矩形都不重合。所以可以分为两步。第一步随机选择一个矩形,第二步随机选择矩形上的点。难点在于如何有效地随机选择矩形。可以计算每个矩形的点数,然后做一个累加数组。数组的第一位是第一个矩形的点数,第n位是前n个矩形的点之和。然后取一个从0到该区域的随机数,看哪个矩形落在上面,选择哪个矩形。您可以使用二进制搜索来提高效率。importbisectclass解决方案:def__init__(self,rects:List[List[int]]):self.r=rectsself.p=[]cur=0forrinrects:cur+=(abs(r[2]-r[0])+1)*(abs(r[3]-r[1])+1)self.p.append(cur)defpick(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/