// 836 easy 矩形重疊
//
// 矩形以列表 [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 之間。
/**
* @param {number[]} rec1
* @param {number[]} rec2
* @return {boolean}
*/
var isRectangleOverlap = function(rec1, rec2) {
let [x1, y1, x2, y2] = rec1;
let [x3, y3, x4, y4] = rec2;
let XoverlayDistance = twoLineSeparate(x1, x2, x3, x4)
let YoverlayDistance = twoLineSeparate(y1, y2, y3, y4)
if (XoverlayDistance === 0 || YoverlayDistance === 0) {
return false
}
return true
};
// 某方向上重疊距離
function twoLineSeparate(p1, p2, p3, p4){
let len1 = p2 - p1;
let len2 = p4 - p3;
let max = Math.max(p1, p2, p3, p4)
let min = Math.min(p1, p2, p3, p4)
// 相離
if (max - min >= len1 + len2){
return 0
// 1包含2
} else if (max - min === len1){
return len2
// 2包含1
} else if(max - min === len2){
return len1
} else {
// 相交
return (len1 + len2) - (max - min)
}
}
console.log(isRectangleOverlap([0,0,2,2], [1,1,3,3]))
LeetCode836-矩形重疊-JavaScript版
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.