在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积。
每个矩形由其左下顶点和右上顶点坐标表示,如图所示。
示例:
输入: -3, 0, 3, 4, 0, -1, 9, 2
输出: 45
说明: 假设矩形面积不会超出 int 的范围。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rectangle-area
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
bool mycmp(vector<int>& A, vector<int>& B)
{
if(A[0] < B[0])
return true;
return false;
}
class Solution {
public:
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H)
{
long long area1 = (D-B) * (C-A);
long long area2 = (H-F) * (G-E);
int heng = 0;
int shu = 0;
vector<vector<int>> nums;
vector<int> tmp(2);
tmp[0] = A;
tmp[1] = C;
nums.push_back(tmp);
tmp[0] = E;
tmp[1] = G;
nums.push_back(tmp);
sort(nums.begin(), nums.end(), mycmp);
if(nums[1][0] < nums[0][1])
{
heng = nums[0][1] - nums[1][0];
if(nums[1][1] <= nums[0][1])
{
heng = nums[1][1] - nums[1][0];
}
}
nums.clear();
tmp[0] = B;
tmp[1] = D;
nums.push_back(tmp);
tmp[0] = F;
tmp[1] = H;
nums.push_back(tmp);
sort(nums.begin(), nums.end(), mycmp);
if(nums[1][0] < nums[0][1])
{
shu = nums[0][1] - nums[1][0];
if(nums[1][1] <= nums[0][1])
{
shu = nums[1][1] - nums[1][0];
}
}
cout <<"heng = "<< heng << endl;
cout <<"shu = "<< shu << endl;
int xiangjiao = heng * shu;
cout << area1 + area2 << endl;
return area1 + area2 - xiangjiao;
}
};