391. 完美矩形--Python

给你一个数组 rectangles ,其中 rectangles[i] = [xi, yi, ai, bi] 表示一个坐标轴平行的矩形。这个矩形的左下顶点是 (xi, yi) ,右上顶点是 (ai, bi) 。

如果所有矩形一起精确覆盖了某个矩形区域,则返回 true ;否则,返回 false 。

在这里插入图片描述

def isRectangleCover(self, rectangles: List[List[int]]) -> bool:
	# 正方形四个点的初始化
    minX, minY, maxA, maxB = rectangles[0][0], rectangles[0][1], rectangles[0][2], rectangles[0][3]
    # 面积
    area = 0
    cnt = defaultdict(int)
    for rectangle in rectangles:
        x, y, a, b = rectangle[0], rectangle[1], rectangle[2], rectangle[3]
        area += (a - x) * (b - y)

		# 注意四个点是哪两个属性值决定的
        minX = min(minX, x)
        minY = min(minY, y)
        maxA = max(maxA, a)
        maxB = max(maxB, b)

		# 除了完美正方形的四个顶点,其余点只能出现2、4次
        cnt[(x, y)] += 1
        cnt[(a, y)] += 1
        cnt[(x, b)] += 1
        cnt[(a, b)] += 1
    # 大面积等于小面积之和 且 四个顶点各出现一次
    if area != (maxA - minX) * (maxB - minY) or cnt[(minX, minY)] != 1 or cnt[(maxA, minY)] != 1 \
            or cnt[(minX, maxB)] != 1 or cnt[(maxA, maxB)] != 1:
        return False
    del cnt[(minX, minY)]
    del cnt[(maxA, minY)]
    del cnt[(minX, maxB)]
    del cnt[(maxA, maxB)]
    return all(c == 2 or c == 4 for c in cnt.values())

时间复杂度:O(n)
空间复杂度:O(n)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/perfect-rectangle
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值