原链接https://leetcode.com/problems/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.
![Rectangle Area](https://leetcode.com/static/images/problemset/rectangle_area.png)
Assume that the total area is never beyond the maximum possible value of int.
读入4个坐标,然后将其中的x坐标和y坐标放在一个数组中按从大到小排序,取出中间的两个x和y坐标对应为重叠区域的左下角和右上角坐标,当然啦, 前提是要重叠的情况,
当然不重叠的情况只需要判断一下坐标的位置。然后 总面积的大小=两个矩形的面积-重叠的面积(由于数组比较小,我用的冒泡)
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
if (F >= D || H <= B || A >= G || C <= E)return (C - A)*(D - B) + (G - E)*(H - F);
if (C >= G && D >= H && E >= A && F >= B)return (C - A)*(D - B);
if (G >= C && H >= D && A >= E && B >= F)return (G - E)*(H - F);
int x[4], y[4];
x[0] = A; x[1] = C; x[2] = E; x[3] = G;
y[0] = B; y[1] = D; y[2] = F; y[3] = H;
for (int i = 0; i < 4; ++i)
{
for (int j = i + 1; j < 4; ++j)
{
if (x[i] > x[j])
{
x[i] = x[i] ^ x[j];
x[j] = x[i] ^ x[j];
x[i] = x[i] ^ x[j];
}
if (y[i] > y[j])
{
y[i] = y[i] ^ y[j];
y[j] = y[i] ^ y[j];
y[i] = y[i] ^ y[j];
}
}
}
return (C - A)*(D - B) + (G - E)*(H - F) - (x[2] - x[1])*(y[2] - y[1]);
}
};