leetcode 223: Rectangle Area

Find the total area covered by two rectilinear rectangles in a 2D plane.

Each rectangle is defined by its bottom left corner and top right corner as shown in the figure.

leetcode 223: Rectangle Area_第1张图片

Assume that the total area is never beyond the maximum possible value of int.
Credits:
Special thanks to @mithmatt for adding this problem, creating the above image and all test cases.
Subscribe to see which companies asked this question

题目大意:
计算二维平面上两个直线矩形的覆盖面积。
矩形通过其左下角和右上角的坐标进行定义。
假设总面积不会超过int的最大值。
解题思路:
简单计算几何。根据容斥原理:S(M ∪ N) = S(M) + S(N) - S(M ∩ N)
题目可以转化为计算矩形相交部分的面积

S(M) = (C - A) * (D - B)

S(N) = (G - E) * (H - F)

S(M ∩ N) = max(min(C, G) - max(A, E), 0) * max(min(D, H) - max(B, F), 0)

代码:

	public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
		int sums = (C - A) * (D - B) + (G - E) * (H - F);
		//一开始这个情况没有处理导致提交失败
		if (A >= G || B >= H || C <= E || D <= F){
			return sums;
	    }
		return sums - Math.max(Math.min(C, G) - Math.max(A, E), 0) *
				Math.max(Math.min(D, H) - Math.max(B, F), 0);
	        
	}


你可能感兴趣的:(java,LeetCode,rectangle,area)