题目在这:https://blog.csdn.net/qq_38737428?spm=1011.2124.3001.5343
思路分析:
题目求两个矩形的覆盖面积。
所以直接算出来两个矩形的面积,然后判断是否有重叠的地方,有的话就减去一次重叠的地方面积就ok了。
计算两个矩形的面积就不说了,按坐标走就行了。
说一下计算重叠区域面积。
计算重叠面积的底边长度: s_d = max(0,(min(ax2,bx2) - max(ax1,bx1)))
计算重叠面积的高度: s_h = max(0,(min(ay2,by2) - max(ay1,by1)))
上面的式子如果算出来负数则说明没有重叠。
这里算法我不知道怎么想出来的,不过手动走了一遍,下次再做到这种题也有能想到。
完整代码:
class Solution:
def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int:
s1 = (bx2 - bx1) * (by2 - by1)
s2 = (ax2 - ax1) * (ay2 - ay1)
sum_area = s1 + s2
s_h = max(0,(min(ay2,by2) - max(ay1,by1)))
s_d = max(0,(min(ax2,bx2) - max(ax1,bx1)))
mul_area = s_d * s_h
print(sum_area - mul_area)
return sum_area - mul_area