Leetcode 223 Rectangle Area 矩形区域面积
来源:互联网 发布:谷歌软件开发 编辑:程序博客网 时间:2024/05/16 06:45
原题地址
https://leetcode.com/problems/rectangle-area/
题目描述
Find the total area covered by two rectilinear rectangles in a 2D plane.
计算两个矩形所在2D空间内覆盖的区域面积。
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.
假设计算结果不超过int的最大值。
解题思路
解题思路还是很简单的,先分别计算两个矩形的面积并求和,然后减去矩形重合部分的面积即可,因为重合部分被计算了两次。对于计算单个矩形的面积非常简单 dx * dy
,剩下的问题就是求重合部分的面积了。
如何判断两个矩形有重合?如何计算重合部分面积?
1. 判定重合
对于以下四种情况,肯定无重合:
- (1)如果矩形A的右上顶点的横坐标小于矩形B的左下角的横坐标
- (2)如果矩形A的左下顶点的横坐标大于矩形B的右上角下角的横坐标
- (3)如果矩形A的左下顶点的纵坐标大于矩形B的右上角的纵坐标
- (4)如果矩形A的右上顶点的纵坐标小于矩形B的左下角的纵坐标
判定无重合的方法非常简单,无重合时直接返回重合部分面积为0。
2. 有重合时求重合部分面积
有重合时,大概如下:
简单描述就是:在两个矩形的四个顶点中,分别把横纵坐标排序,然后分别取横纵坐标的中间两个数,其构成的矩形区域就是重合区域。
有了如上两步,这个问题的解决就比较轻松了。
代码
/** * 计算两个矩形覆盖的总面积 */int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { return (D - B) * (C - A) + (H - F) * (G - E) - computeRetainArea(A, B, C, D, E, F, G, H);}/** * 计算两个矩形重合区域面积 */int computeRetainArea(int A, int B, int C, int D, int E, int F, int G, int H) { void sort(int*, int, int); if (E >= C || G <= A || H <= B || F >= D) return 0; // 不重合 int nums[4]; // 计算x坐标重合区域差值 nums[0] = A; nums[1] = C; nums[2] = E; nums[3] = G; sort(nums, 0, 3); int diffX = nums[1] - nums[2]; // 计算y坐标重合区域差值 nums[0] = B; nums[1] = D; nums[2] = F; nums[3] = H; sort(nums, 0, 3); int diffY = nums[1] - nums[2]; int ans = diffX * diffY; return ans < 0 ? -ans : ans;}
完整代码 https://github.com/Orange1991/leetcode/blob/master/223/c/main.c
测试数据
-3,0,3,4,0,-1,9,2 : 45-2,-2,2,2,-2,-2,2,2 : 160,0,0,0,-1,-1,1,1 : 4
2015/8/28
- Leetcode 223 Rectangle Area 矩形区域面积
- LeetCode 223 Rectangle Area(矩形面积)
- leetcode 223. Rectangle Area-矩形面积
- leetcode 223. Rectangle Area 矩形面积计算
- LeetCode-223. Rectangle Area (JAVA)求矩形覆盖面积
- 【LeetCode-面试算法经典-Java实现】【223-Rectangle Area(矩形区域)】
- Rectangle Area 两个矩形的面积
- Rectangle Area 两个矩形的面积
- Rectangle Area-带有交差集矩形面积
- LeetCode 223. Rectangle Area(两个矩形的复合面积计算)
- Leetcode No.223 Rectangle Area 判断矩形相交
- Rectangle Area - LeetCode 223
- leetcode 223: Rectangle Area
- leetcode[223]:Rectangle Area
- Leetcode 223 Rectangle Area
- leetcode 223:Rectangle Area
- leetcode-223 Rectangle Area
- Leetcode #223 Rectangle Area
- 自定义控件
- DecimalFormat类的用法
- 修改安装过程中的文字显示
- ios 开发不同应用间相互跳转
- 微信支付--MD5util
- Leetcode 223 Rectangle Area 矩形区域面积
- 【Android Training - Multimedia】管理音频播放[Lesson 2 - 管理音频焦点Audio Focus]
- 关于类、方法、变量、语句块的加载顺序
- 对面向对象编程的认识
- LeetCode(235) Lowest Common Ancestor of a Binary Search Tree
- 微信支付--异步处理支付结果
- java.io.IOException: open failed: EINVAL (Invalid argument)
- TCP协议以及套接字方面的总结(1)
- 【SDOI2008】【BZOJ2190】仪仗队