zoukankan      html  css  js  c++  java
  • LeetCode 223 矩形面积

    给你 二维 平面上两个 由直线构成的 矩形,请你计算并返回两个矩形覆盖的总面积。

    每个矩形由其 左下 顶点和 右上 顶点坐标表示:

    • 第一个矩形由其左下顶点 (ax1, ay1) 和右上顶点 (ax2, ay2) 定义。
    • 第二个矩形由其左下顶点 (bx1, by1) 和右上顶点 (bx2, by2) 定义。

    示例 1:

    Rectangle Area
    输入:ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4, bx1 = 0, by1 = -1, bx2 = 9, by2 = 2
    输出:45
    

    示例 2:

    输入:ax1 = -2, ay1 = -2, ax2 = 2, ay2 = 2, bx1 = -2, by1 = -2, bx2 = 2, by2 = 2
    输出:16
    
    容斥原理
    /**
     * 容斥原理
     *
     * @return
     */
    public static int computeArea(int ax1, int ay1, int ax2, int ay2,
                                  int bx1, int by1, int bx2, int by2) {
        // x y  交集面积,x是在X轴上的重合长度,y则是在Y轴上的重合长度
        int x = Math.max(0, Math.min(ax2, bx2) - Math.max(ax1, bx1));
        int y = Math.max(0, Math.min(ay2, by2) - Math.max(by1, ay1));
        // 两个矩形的面积和减去两者的交集
        return (ax2 - ax1) * (ay2 - ay1) + (bx2 - bx1) * (by2 - by1) - (x * y);
    }
    
    测试用例
    public static void main(String[] args) {
        int ax1 = -3, ay1 = 0, ax2 = 3, ay2 = 4;
        int bx1 = 0, by1 = -1, bx2 = 9, by2 = 2;
        int area = ComputeArea.computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2);
        System.out.println("ComputeArea demo01 result : " + area);
    
        ax1 = -2;
        ay1 = -2;
        ax2 = 2;
        ay2 = 2;
        bx1 = -2;
        by1 = -2;
        bx2 = 2;
        by2 = 2;
        area = ComputeArea.computeArea(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2);
        System.out.println("ComputeArea demo02 result : " + area);
    }
    
    测试结果
    ComputeArea demo01 result : 45
    ComputeArea demo02 result : 16
    
  • 相关阅读:
    Flex【原创】移动设备相册图片浏览功能
    Flex SharedObject
    Flex Mobile applicationDPI 自适应
    Flex4.6【原创】移动设备拖曳、缩放、旋转手势并用(避免冲突)
    Flex Copy & Clone
    FlashBuilder 无法调试问题
    Flex【原创】惯性定位效果
    C#播放声音的两个方法 + 流读写文件
    ArrayList
    HDOJ1724椭圆
  • 原文地址:https://www.cnblogs.com/fyusac/p/15357200.html
Copyright © 2011-2022 走看看