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.



  我的代码(18ms):问题简单,注意分类条件即可。

//求两条线的重合部分
int intersection(int left1, int right1, int left2, int right2){
	if (right1 <= right2){
		if (left1 < left2){
			if (right1 > left2){
				return right1 - left2;
			}
			else{
				return 0;
			}
		}
		else{
			return right1 - left1;
		}
	}
	else{
		if (left1 > left2){
			if (right2 > left1){
				return right2 - left1;
			}
			else{
				return 0;
			}
		}
		else{
			return right2 - left2;
		}
	}
}

int computeArea(int A, int B, int C, int D, int E, int F, int G, int H){
	int width_intersection = intersection(A, C, E, G);
	int height_intersection = intersection(F, H, B, D);
	int all = (C - A)*(D - B) + (G - E)*(H - F);
	int in = width_intersection * height_intersection;
	return all - in;
}

  我的代码(19ms):代码简约 直接求出交叉部分两个顶点
int computeArea(int A, int B, int C, int D, int E, int F, int G, int H){
	int nblx = (A > E) ? A : E;
	int nbly = (B > F) ? B : F;
	int ntrx = (C > G) ? G : C;
	int ntry = (D > H) ? H : D;
	int uni = 0;
	if (ntrx >= nblx && ntry >= nbly) uni = (ntrx - nblx) * (ntry - nbly);
	return ((C - A) * (D - B) + (G - E) * (H - F)) - uni;
}




  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值