836. 矩形重叠
矩形以列表 [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 轴默认指向上。
你可以仅考虑矩形是正放的情况。
/**
* 思路:不重叠的四种情况:x2 <= x3 || x4 <= x1 || y4 <= y1 || y2 <= y3
*/
class Solution {
//方法一
// public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
// boolean overlay_x = !(rec1[2] <= rec2[0] || rec2[2] <= rec1[0]);
// boolean overlay_y = !(rec1[3] <= rec2[1] || rec2[3] <= rec1[1]);
// return overlay_x&&overlay_y;
// }
//方法二
public boolean isRectangleOverlap(int[] rec1, int[] rec2) {
return !(rec1[2] <= rec2[0] || rec2[2] <= rec1[0] || rec1[3] <= rec2[1] || rec2[3] <= rec1[1]);
}
}
223. 矩形面积
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。
class Solution {
public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
if(!(C<=E || G<=A || H<=B || D<=F)){//有重叠
int area1 = (D-B) * (C-A);
int area2 = (H-F) * (G-E);
int maxX = Math.min(C, G); //重叠区域的右边界
int minX = Math.max(A, E); //重叠区域的左边界
int maxY = Math.min(D, H); //重叠区域的上边界
int minY = Math.max(B, F); //重叠区域的下边界
int area3 = (maxX - minX) * (maxY - minY);
return area1 + area2 - area3;
}else{//无重叠
int area1 = (D-B) * (C-A);
int area2 = (H-F) * (G-E);
return area1 + area2;
}
}
}