Leetcode_223_Rectangle Area

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/pistolove/article/details/46868363

本文是在学习中的总结,欢迎转载但请注明出处: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.

Rectangle Area

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;
	}
}


Area

09-06

Problem Descriptionn电子科大清水河校区是电子科大大力兴建的未来主校区,于07年秋正式迎接学生入住,目前有07、08级本科生及部分研究生在此校区学习、生活。n清水河校区位于成都高新西区的中部地带,占地约3128亩。从空中看,新校区的整体像一个长方形,南北长,东西窄。一条水渠从西北角的顶点注入,笔直的延伸到南面围墙的大概三分之一分点的地方,由此流出学校。位于这条水渠和西墙之间的是研究院,最南面的是学术交流中心和接待中心。n在本题中,假设清水河校区是一个凸多边形,水渠是一条直线,要求给出清水河校区被水渠分割成的两部分的面积。n n nnInputn输入包含多组数据。每组数据第一行是一个整数N(3<=N<=20),表示清水河校区的边数,N=0表示输入结束。随后有N行,每行有两个整数X,Y(0<=X,Y<=10000),按顺时针顺序给出清水河校区的每个顶点的坐标。最后一行包含四个整数X0,Y0,X1,Y1,(0<= X0,Y0,X1,Y1<=10000),表示水渠上的两个点的(X0,Y0),(X1,Y1)的坐标,保证这两个点一定不会重合,同时保证水渠一定穿过清水河校区。n nnOutputn对每组数据,输出一行,按大小顺序输出清水河校区被水渠分割成的两部分的面积。面积大者在前面输出。(输出部分要四舍五入到整数)!n nnSample Inputn4n0 0n0 100n100 100n100 0n10 0 15 5n0n nnSample Outputn5950 4050

没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试