本文共 1179 字,大约阅读时间需要 3 分钟。
给定平面直角坐标系中两个矩形,求其边界围成的区域的面积。计算两个矩形重叠部分即可,如果没有重叠则直接返回两个矩形面积之和,否则返回面积之和减去重叠部分的面积。
代码解析:
public class Solution { public int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { // 计算重叠部分的左、右边界坐标 int left = Math.max(A, E); int right = Math.min(C, G); // 计算重叠部分的上、下边界坐标 int low = Math.max(B, F); int up = Math.min(D, H); // 计算两个矩形的面积之和 int sum = (C - A) * (D - B) + (G - E) * (H - F); // 判断是否有重叠 if (right <= left || up <= low) { return sum; // 没有重叠时,直接返回面积之和 } // 计算重叠部分的面积 int overlap = (right - left) * (up - low); return sum - overlap; // 有重叠时,返回面积之和减去重叠部分 }} 代码解释:
确定重叠边界:
left = Math.max(A, E):取两个矩形左边界较大的一个。right = Math.min(C, G):取两个矩形右边界较小的一个。low = Math.max(B, F):取两个矩形下边界较大的一个。up = Math.min(D, H):取两个矩形上边界较小的一个。计算面积之和:
(C - A) * (D - B)。(G - E) * (H - F)。sum = (C - A) * (D - B) + (G - E) * (H - F)。判断是否有重叠:
right <= left 或 up <= low,说明没有重叠,直接返回总面积。计算并返回重叠部分面积:
right - left。up - low。overlap = (right - left) * (up - low)。时空复杂度:
该算法的时间复杂度为 O(1),因为所有操作仅涉及基本的算术运算和条件判断,无需循环或其他复杂操作。
转载地址:http://azcs.baihongyu.com/