zoukankan      html  css  js  c++  java
  • LeetCode 223. Rectangle Area

    原题链接在这里:https://leetcode.com/problems/rectangle-area/

    题目:

    Find the total area covered by two rectilinear rectangles in a 2D plane.

    Each rectangle is defined by its bottom left corner and top right corner as shown in the figure.

    Rectangle Area

    Example:

    Input: A = -3, B = 0, C = 3, D = 4, E = 0, F = -1, G = 9, H = 2
    Output: 45

    Note:

    Assume that the total area is never beyond the maximum possible value of int.

    题解:

    方块1面积 + 方块2面积 - 重叠面积

    Note: 算重叠的面积时会有overflow, Math.min(C,G) 之前必须加 cast, e.g Math.min(C,G) = -150000001, Math.max(A,E) = 150000000.

    原来写(long)(Math.min(C,G) - Math.max(A,E))会报错是因为Math.min(C,G)和Math.max(A,E)都是 Integer, 所以cast之前的结果会default成Integer, 还是会有overflow.

    Time Complexity: O(1).

    Space: O(1).

    AC Java:

     1 public class Solution {
     2     public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
     3         int area1 = (C-A)*(D-B);
     4         int area2 = (G-E)*(H-F);
     5         
     6         long width = Math.max((long)Math.min(C,G) - (long)Math.max(A,E), 0);
     7         long hight = Math.max((long)Math.min(D,H) - (long)Math.max(B,F), 0);
     8         int overflow = (int)(width*hight);
     9         
    10         return area1+area2-overflow;
    11     }
    12 }

    Could avoid overflow as well.

    Time Complexity: O(1).

    Space: O(1).

    AC Java: 

     1 class Solution {
     2     public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) {
     3         return area(A, B, C, D) + area(E, F, G, H) - area(Math.max(A, E), Math.max(B, F), Math.min(C, G), Math.min(D, H));
     4     }
     5     
     6     private int area(int a, int b, int c, int d){
     7         if(a >= c || b >= d){
     8             return 0;
     9         }
    10         
    11         return (c - a) * (d - b); 
    12     }
    13 }
  • 相关阅读:
    实验一、DOS使用命令实验
    实验三、进程调度模拟程序
    实验四、存储管理
    实验二、作业调度模拟程序
    简单的DOS命令
    结构化方法和面向对象方法的比较
    jstree 取消选中父节点
    T4 模板代码生成
    基于Open XML 导出数据到Excel
    菜单(列存储转为行存储)
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/4825039.html
Copyright © 2011-2022 走看看