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

Posted

技术标签:

【中文标题】查找两个数组之间的共同最小值【英文标题】:Finding common minimum value between two arrays 【发布时间】:2015-10-27 23:59:45 【问题描述】:

我正在处理 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;

【问题讨论】:

因为我需要返回要在两个数组中找到的最小数字。如果 A[0] 和 B[0] 不同,那将无济于事。 尝试考虑这个答案***.com/questions/31828623/… 你只需要合并、排序然后得到第一个索引 【参考方案1】:

我们来吧,

A = [ 1, 3, 5, 7]
B = [ 0, 0, 1, 4, 6]

然后运行你的循环。

您的脚本失败

正确的逻辑应该是,您可以在 1 次迭代中增加 ik。不是两者都

我会做类似的事情,

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;

【讨论】:

这是答案,先生。谢谢。【参考方案2】:

这应该可行。只需将第一个 if 替换为 whilewhile 循环遍历数组 B,直到找到大于 A 的最小元素的元素。然后外部 for 循环遍历 A 以找到与 B 的当前元素匹配的任何元素,或者直到它到达大于 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

【讨论】:

【参考方案3】:

我建议在这里更改您的方法。 在开始时对两个数组进行排序是昂贵的。 找到两个数组的交集,然后排序,返回它的最小值,就是这样。

【讨论】:

我要将此标记为答案。谢谢你。但是,有什么方法可以修改我的代码最多两行?这就是我应该做的。我知道交叉点更好,但出于某种奇怪的原因我应该使用循环...... “应该这样做”?这是学校作业吗? 我正在研究一本学生书籍中的编程挑战。【参考方案4】:
// java code for this 
import java.util.Arrays;

public class CommonMinValue 

public static void main(String[] args) 
    int [] A = 1,5,6,7,8,9,11;
    int [] B = 11,51,16,7,18,19,161;
    
    int n = A.length;
    int m = B.length;;
    Arrays.sort(A);
    System.out.println(Arrays.toString(A));
    System.out.println(Arrays.toString(B));
    Arrays.sort(B);
    int commMin=-1;
    
    int i = 0;
    for (int k = 0; k < n;) 
         if (A[k] == B[i]) 
            commMin = A[k];
            break;
         
        if (i < m - 1 && B[i] < A[k])
            i ++;
        else
            k ++;
       
    
   System.out.println("Common minimum value "+commMin);
   

【讨论】:

以上是关于查找两个数组之间的共同最小值的主要内容,如果未能解决你的问题,请参考以下文章

按组和列之间查找最小值

使用java编写两个方法min和max在链表中查找最大值和最小值,但输入列表是整数数组

在数组中查找最小值和最大值

在某些条件下,找到两个数组之间(逐项)比率的最大值或最小值

在 Java 中使用数组查找最小值、最大值和平均值

查找对应于另一个数组中沿轴的最小值的数组