演算法題 矩形重疊

2021-10-04 02:17:28 字數 1833 閱讀 9253

題目

矩形以列表 [x1, y1, x2, y2] 的形式表示,其中 (x1, y1) 為左下角的座標,(x2, y2) 是右上角的座標。

如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。

給出兩個矩形,判斷它們是否重疊並返回結果。

示例 1:

輸入:rec1 = [0,0,2,2], rec2 = [1,1,3,3]

輸出:true

示例 2:

輸入:rec1 = [0,0,1,1], rec2 = [1,0,2,1]

輸出:false

說明:兩個矩形 rec1 和 rec2 都以含有四個整數的列表的形式給出。

矩形中的所有座標都處於 -10^9 和 10^9 之間。

解題思路:

根據題意可得當兩個矩陣重疊時,其對應邊投影到x、y軸的投影區間必然會相交,因此,我們可由題目所述得出以下結論:

設矩陣一座標[x1,y1,x2,y2],矩陣二座標:[x3,y3,x4,y4]

當x1 <= x3 < x2 || x3 <= x1 < x4

且y1 <= y3 < y2 || y3 <= y1 < y4

則兩個矩陣x、y軸投影區間均重疊,即可判斷兩個矩陣是否重疊

根據思路可寫出如下**:

go

func

isrectangleoverlap

(rec1 [

]int

, rec2 [

]int

)bool

return

false

}

可以看到以上**看上去稍微有點複雜。然而,我們需要判斷的只是兩組矩陣對應的兩個區間是否相交,參考:

可得證明兩個區間是否相交可以先通過判斷兩個區間不相交,然後對結果取反即可。

設矩陣一座標[x1,y1,x2,y2],矩陣二座標:[x3,y3,x4,y4]

當 (得出的是矩陣投影到x軸區間不相交的判斷結果,對其取反即可判斷兩個區間是否相交,y軸同理)

!(x2 <= x3 || x4 <= x1)且!(y2 <= y3 || y4 <= y1)

即可判斷兩個矩陣是否重疊

go

func

isrectangleoverlap

(rec1 [

]int

, rec2 [

]int

)bool

同時,根據德·摩根定律

非(p 或 q)=(非 p)且(非 q)

可將上述**等價轉換成以下**(基本減少一次取反運算)

go

func

isrectangleoverlap

(rec1 [

]int

, rec2 [

]int

)bool

再去除臨時儲存變數得:

go

func

isrectangleoverlap

(rec1 [

]int

, rec2 [

]int

)bool

矩形法 矩形重疊

問題一 矩形以列表 x1,y1,x2,y2 的形式表示,其中 x1,y1 為左下角的座標,x2,y2 是右上角的座標。如果相交的面積為正,則稱兩矩形重疊。需要明確的是,只在角或邊接觸的兩個矩形不構成重疊。給出兩個矩形,判斷它們是否重疊並返回結果。示例 1 輸入 rec1 0,0,2,2 rec2 1...

LeetCode每日一題 矩形重疊

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