编码测试JavaScript

时间:2016-06-04 05:02:17

标签: javascript php html5

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

 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).

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