Leetcode_223_Rectangle Area
2015-07-13 22:02
260 查看
本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/46868363
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.
Assume that the total area is never beyond the maximum possible value of int.
思路:
(1)题意为给定两个矩形的对角坐标,求解两矩形所形成的面积大小。
(2)该题比较简单,最开始对其进行分析时,考虑的比较复杂。考虑到两个矩形之间的关系无非包括三种:相离、相交、包含。对于相离,只需要判定其中一个矩形的横、纵坐标的最小值大于另一个的最大值即可;对于包含,只需判定其中一个矩形的两个顶点坐标范围是否在另一个矩形中即可;对于包含,稍微有一点复杂,包括其中一个矩形的一个顶点和两个顶点在另一个矩形中的情况。对于本题,则只需考虑上图所示的情况即可,相对比较简单,只需求出总面积,然后减去公共的面积,即为两矩形所形成的面积。
(3)详情见下方代码。希望本文对你有所帮助。
算法代码实现如下:
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.
Assume that the total area is never beyond the maximum possible value of int.
思路:
(1)题意为给定两个矩形的对角坐标,求解两矩形所形成的面积大小。
(2)该题比较简单,最开始对其进行分析时,考虑的比较复杂。考虑到两个矩形之间的关系无非包括三种:相离、相交、包含。对于相离,只需要判定其中一个矩形的横、纵坐标的最小值大于另一个的最大值即可;对于包含,只需判定其中一个矩形的两个顶点坐标范围是否在另一个矩形中即可;对于包含,稍微有一点复杂,包括其中一个矩形的一个顶点和两个顶点在另一个矩形中的情况。对于本题,则只需考虑上图所示的情况即可,相对比较简单,只需求出总面积,然后减去公共的面积,即为两矩形所形成的面积。
(3)详情见下方代码。希望本文对你有所帮助。
算法代码实现如下:
/** * * @author lqq * */ public class Rectangle_Area { public int computeArea(int A, int B, int C, int D, int E, int F, int G,int H) { // // //相离 // if((E>=C || G<=A) && (H<=B || F>=D)){ // int _area1 = (C-A>=0?(C-A):(A-C)) * (B-D>=0?(B-D):(D-B)); // int _area2 = (G-E>=0?(G-D):(D-G)) * (H-F>=0?(H-F):(F-H)); // // return _area1 + _area2; // } // // //包含 // if((A<=E && E<=C && A<=G &&G<=C&&B<=F&&F<=D&&B<=H&&H<=D)){ // int _area1 = (C-A>=0?(C-A):(A-C)) * (B-D>=0?(B-D):(D-B)); // return _area1; // }else if((A>=E && E>=C && A>=G &&G>=C&&B>=F&&F>=D&&B>=H&&H>=D)){ // int _area2 = (G-E>=0?(G-D):(D-G)) * (H-F>=0?(H-F):(F-H)); // return _area2; // } // // //相交 分为一个点在里面和两个点在里面 int area = (D - B) * (C - A) + (G - E) * (H - F); // 总面积 int left = Math.max(A, E); int down = Math.max(B, F); int right = Math.min(G, C); int up = Math.min(D, H); if (up <= down || right <= left) { return area; } area = area - (right - left) * (up - down); return area; } }
相关文章推荐
- 基于SPI的LSP网络封包截获
- Lettcode_223_Rectangle Area
- Umbraco隐藏属性
- ssh(安全外壳协议)
- vc 6.0 快捷键
- CentOS 7 折腾小记
- 产品蔟的创建--抽象工厂模式
- 快速傅立叶变换(FFT)
- 欧拉函数 素数原根 POJ 1284
- 32.求两个序列的和的最小差值
- Access中的SELECT @@IDENTITY
- Android(java)学习笔记128:使用proguard混淆android代码
- ubuntu 下搭建apache+python的运行环境
- vs 2013中设置vc 6.0 中的快捷键
- CvUserdata
- mahout中kmeans算法和Canopy算法实现原理
- ToDo List
- python——动态类型
- jenkins秘籍攻略收集
- python 正则表达式