如果矩形的所有边都与坐标轴平行,则该矩形称为直线。可以通过指定其左下角和右上角的坐标来描述这种矩形。写一个函数:
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).
答案 0 :(得分:-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解决方案,那么使用它作为参考来编写它应该很简单。