leetcode 391 完美矩形
Posted digdig
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 391 完美矩形相关的知识,希望对你有一定的参考价值。
from typing import List from collections import Counter class Solution: def isRectangleCover(self, rectangles) -> bool: rects = [Rectangle(*item) for item in rectangles] counter = Counter() for rect in rects: counter.update(rect.getFourPoints()) r = [] for k,v in counter.items(): if v%2!=0 and v!=1: return False elif v==1: r.append(k) if len(r)>4: return False if len(r)!=4: return False xs = [i[0] for i in r] ys = [i[1] for i in r] w = max(xs)-min(xs) h = max(ys)-min(ys) return sum([rect.getArea() for rect in rects])==w*h class Rectangle: def __init__(self,x,y,x2,y2): self.x = x self.y = y self.x2 = x2 self.y2 = y2 self.w = x2-x self.h = y2-y def getArea(self): return self.w*self.h def getFourPoints(self): a = (self.x,self.y) b = (self.x,self.y2) c = (self.x2,self.y) d = (self.x2,self.y2) return [a,b,c,d]
这道题对于重叠的判断好难想啊,我是看了题解才知道怎么做。在做题过程中,又学会了一些东西,记载如下
1 python3里面的list.sort函数没有cmp参数了,只有key参数,所以需要借助functools里面的cmp_to_key来把cmp函数转换为key函数。知乎上有关于这方面的讨论,可以看看。
2 python2里面的cmp函数是a>b,返回1(或者正数),a<b,返回-1(或者负数),a=b,返回0.但是c++的stl里面,cmp是返回a<b
3 怎样判断两个矩形是否有交集?
矩形a (x1,y1) (x2,y2)
矩形b (x3,y3) (x4,y4)
则 max(x1,x3)<min(x2,x4)&&max(y1,y3)<min(y2,y4)
这个逻辑表达式就可以判断两矩形是否有重叠部分。
以上是关于leetcode 391 完美矩形的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 391. 完美矩形(扫描线) / 318. 最大单词长度乘积 / 563. 二叉树的坡度
2022-01-21:完美矩形。 给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi,