程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> LeetCode 223 Rectangle Area(矩形面積)

LeetCode 223 Rectangle Area(矩形面積)

編輯:關於C++

翻譯

找到在二維平面中兩個相交矩形的總面積。

每個矩形都定義了其左下角和右上角的坐標。

(矩形如下圖)

假設,總占地面積永遠不會超過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;
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved