查找两个数组之间的共同最小值

Vin*_*age 3 javascript arrays min minimum

我正在处理 Javascript 中的一个问题。寻找两个数组之间的共同最小值。但是,有人告诉我这可能不适用于某些值。问题是什么?

function cmp(a, b) { return a - b; }

function findMinimum(A, B) {
    var n = A.length;
    var m = B.length;
    A.sort(cmp);
    B.sort(cmp);
    var i = 0;
    for (var k = 0; k < n; k++) {
        if (i < m - 1 && B[i] < A[k])
            i += 1;
        if (A[k] == B[i])
            return A[k];
    }
    return -1;
}
Run Code Online (Sandbox Code Playgroud)

rip*_*ipr 7

这应该有效。只需将第一个替换ifwhile. 循环while遍历数组 B,直到找到大于 A 的最小元素的元素。然后,外循环for遍历 A 查找与 B 的当前元素匹配的任何元素,或者直到找到大于 A 的最小元素的元素。 B 的当前元素,重复该过程。

function cmp(a, b) {
  return a - b;
}

function findMinimum(A, B) {
  var n = A.length;
  var m = B.length;
  A.sort(cmp);
  B.sort(cmp);
  var i = 0;
  for (var k = 0; k < n; k++) {
    while (i < m - 1 && B[i] < A[k])
      i += 1;
    if (A[k] == B[i])
      return A[k];
  }
  return -1;
}

findMinimum([1,3,5,7], [0,0,1,4,9]);  // 1
findMinimum([3,5,7,9], [1,2,4,7,10]); // 7
Run Code Online (Sandbox Code Playgroud)


Cod*_*der 5

让我们来,

A = [ 1, 3, 5, 7]
B = [ 0, 0, 1, 4, 6]
Run Code Online (Sandbox Code Playgroud)

并运行您的循环。

你的脚本失败了

正确的逻辑应该是,你要么增量ik在1次迭代。不是都

我会做类似的事情,

for (var k = 0; k < n;) {
    if (A[k] == B[i])
        return A[k];

    if (i < m - 1 && B[i] < A[k])
        i += 1;
    else
        k += 1;
}
Run Code Online (Sandbox Code Playgroud)