矩形以列表[x1, y1, x2, y2]
的形式表示,其中(x1, y1)
為左下角的座標,(x2, y2)
是右上角的座標。
如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。
給出兩個矩形,判斷它們是否重疊並返回結果。
示例:
輸入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]輸出:true
輸入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]解題思路:輸出:false
第一種(考慮邊界值):
思路:我們可以在平面建乙個座標系,畫出 rec2 的矩形,座標分別為(rec2[0], rec2[1], rec2[2], rec2[3]),現在我們考慮不重疊情況。當 rec1 和 rec2 不發生重疊時,rec1 可以在 rec2 的 上、下、左、右。這裡以左邊為例(其他別思路相同):當 rec1 在 rec2 的左邊時,rec1 右上角的 x 座標(即:rec1[2])應該小於等於 rec2 的左下角的 x 座標(即:rec2[0]), 表示式為:rec1[2] <= rec2[0]。其他方向思路相同。
rec1[2] <= rec2[0] # 左側**:rec1[0] >= rec2[2] # 右側
rec1[1] >= rec2[3] # 上側
rec1[3] <= rec2[1] # 下側
from typing import list
def isrectangleoverlap(rec1: list[int], rec2: list[int]) -> bool:return not (
rec1[2] <= rec2[0] or
rec1[0] >= rec2[2] or
rec1[1] >= rec2[3] or
rec1[3] <= rec2[1]
)
print(isrectangleoverlap(rec1 = [0,0,2,2], rec2 = [1,1,3,3])) # true第二種(考慮重疊):
思路:畫上乙個平面座標系,將 rec1 和 rec2 的矩形的部分面積相重疊,將兩個矩形的 「左下角」 「右上角」 的座標投射到 x、y軸上,可以看到在 x 、y軸上,兩者會有交集。由數學知識可得,當 min(rec1[2], rec2[2]) > max(rec1[0], rec2[0]) 時,在x軸上有交集,當 min(rec1[3], rec2[3]) > max(rec1[1], rec2[1]) 時,在y軸上右交集。
LeetCode 836 矩形重疊
矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0,0,2,2 rec2 1,1,3...
LeetCode836 矩形重疊
矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0,0,2,2 rec2 1,1,3...
LeetCode 836 矩形重疊
矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0,0,2,2 rec2 1,1,3...