编码测试JavaScript



如果矩形的边缘都平行于坐标轴,则称为直线。这样的矩形可以通过指定其左下角和右上角的坐标来描述。编写一个函数:

 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解决方案,使用它作为参考来编写它应该很简单。

最新更新