【问题标题】:Coding test JavaScript编码测试 JavaScript
【发布时间】:2016-06-04 05:02:17
【问题描述】:

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

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

【问题讨论】:

  • 欢迎来到 StackOverFlow,向我们展示您迄今为止的尝试...

标签: javascript php html


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    相关资源
    最近更新 更多