LeetCode 矩形重疊

2022-06-01 08:33:11 字數 1786 閱讀 1590

矩形以列表[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...