如果矩形的边缘都平行于坐标轴,则称为直线。这样的矩形可以通过指定其左下角和右上角的坐标来描述。编写一个函数:
function solution($K, $L, $M, $N, $P, $Q, $R, $S);
给定八个整数,代表两个直线矩形(一个具有左下角 (K, L) 和右上角 (M, N),另一个具有左下角 (P, Q) 和右上角 (R, S)),返回矩形之和的面积。如果矩形相交,则其相交的面积应仅计算一次。如果总和的面积超过 2,147,483,647,则该函数应返回 −1。
例如,给定整数:
K = -4 L = 1 M = 2 N = 6
P = 0 Q = -1 R = 4 S = 3
该函数应返回 42。
第一个矩形的面积为 30,第二个矩形的面积为 16,它们的交点面积为 4。
假设:
K, L, M, N, P, Q, R and S are integers within the range [−2147483648..2147483647];
K < M;
L < N;
P < R;
Q < S.
复杂性:
expected worst-case time complexity is O(1);
expected worst-case space complexity is O(1).
function solution(k, l, m, n, p, q, r, s) {
var rectOneArea = area(k, l, m, n);
var rectTwoArea = area(p, q, r, s);
var overLapArea = intersectingArea(k, l, m, n, p, q, r, s);
return rectOneArea + rectTwoArea - overLapArea;
}
function intersectingArea(k, l, m, n, p, q, r, s) {
var xOverlap = Math.min(m, r) - Math.max(k, p);
var yOverlap = Math.min(n, s) - Math.max(l, q);
return xOverlap * yOverlap;
}
function area(a, b, c, d) {
var width = Math.abs(a - c);
var height = Math.abs(b - d);
return width * height;
}
console.log(solution(-4, 1, 2, 6, 0, -1, 4, 3));
这只是一个简单的数学问题的直接实现......您已经知道它背后的几何形状,即 A1 + A2 - 重叠。
您唯一需要弄清楚的是计算相交面积。
我不知道为什么这被标记为PHP和JavaScript,但是如果你想要一个PHP解决方案,使用它作为参考来编写它应该很简单。