问题描述
在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rectangle-area
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
执行结果
代码描述
思路:先判断是否有交集,不存在交集,则为两个矩形的面积和。如果有交集,则两个矩形的面积和,减去交集的面积。提示里面说不会超出int ,但是有时候真的会超出,所以还得注意!
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
if(A >= G || C <= E || B>=H || D <= F)
return (A-C)*(B-D) + (E-G)*(F-H);
// 排序,取中间两个,即为交集坐标
vector<int> x;
x.push_back(A);
x.push_back(C);
x.push_back(E);
x.push_back(G);
vector<int> y;
y.push_back(B);
y.push_back(D);
y.push_back(F);
y.push_back(H);
sort(x.begin(), x.end());
sort(y.begin(), y.end());
double sum = (double)(C-A)*(D-B) + (double)(G-E)*(H-F); // 此处不用double,会溢出
int more = (x[2]-x[1])*(y[2]-y[1]);
return sum - more;
}
};