zoukankan      html  css  js  c++  java
  • 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)

    这个逻辑表达式就可以判断两矩形是否有重叠部分。

  • 相关阅读:
    CSS布局中——导航是非常常见的
    a标签中的label在IE下触发不了a标签的href链接(label标签——解析)
    table中tr使用toggle不好,选择换一张方式
    css的框架——global.css
    css3属性及事例
    HTML5和CSS3的网站
    利用@media screen实现网页布局的自适应
    关于web中的自适应布局
    css中position:relative的真正理解
    计算时间间隔的js
  • 原文地址:https://www.cnblogs.com/digdig/p/13233363.html
Copyright © 2011-2022 走看看