查找两个数组之间的共同最小值
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 次迭代中增加 i
或 k
。不是两者都
我会做类似的事情,
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
替换为 while
。 while
循环遍历数组 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);
【讨论】:
以上是关于查找两个数组之间的共同最小值的主要内容,如果未能解决你的问题,请参考以下文章