码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode 223 Rectangle Area(矩形面积)

时间:2016-01-27 13:07:10      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:

翻译

找到在二维平面中两个相交矩形的总面积。

每个矩形都定义了其左下角和右上角的坐标。

(矩形如下图)

假设,总占地面积永远不会超过int的最大值。

原文

技术分享

分析

这题前天试过,写了一堆判断,终究还是无果……

贴几个别人的解决方案……

int computeArea(int A, int B, int C, int D, int E, int F, int G, int H)
{
    int64_t xmin1 = min( A, C );
    int64_t xmax1 = max( A, C );

    int64_t ymin1 = min( B, D );
    int64_t ymax1 = max( B, D );

    int64_t xmin2 = min( E, G );
    int64_t xmax2 = max( E, G );

    int64_t ymin2 = min( F, H );
    int64_t ymax2 = max( F, H );

    int64_t xa = min( xmax1, xmax2 ) - max( xmin1, xmin2 );
    int64_t ya = min( ymax1, ymax2 ) - max( ymin1, ymin2 );

    int64_t z = 0, ca = max( xa, z ) * max( ya, z );

    int64_t a1 = (xmax1 - xmin1) * (ymax1 - ymin1);
    int64_t a2 = (xmax2 - xmin2) * (ymax2 - ymin2);

    return a1 + a2 - ca;
}
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
    int overlap = (min(C,G)-max(A,E))*(min(D,H)-max(B,F));
    if ( min(C,G)<=max(A,E) || min(D,H)<=max(B,F) )
        overlap = 0;
    return (C-A)*(D-B)+(G-E)*(H-F)-overlap;
}
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
    int common = (C <= E || A >= G || B >= H || D <= F) ? 0 : (min(C, G) - max(A, E)) * (min(D, H) - max(B, F));
    return (C - A) * (D - B) + (G - E) * (H - F) - common;
}

LeetCode 223 Rectangle Area(矩形面积)

标签:

原文地址:http://blog.csdn.net/nomasp/article/details/50593348

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!