我有两个数组
let arr1 = [1,2,3,4,5]
let arr2 = [6,7,8,9,10]
我想做的是检查arr2
中的任何项目是否大于或等于arr1中的任何项目的两倍。例如,6
中的arr2
大于arr1中的2 * 2。
我的第一个解决方案是
for(let i = 0; i < arr2.length; i++) {
for(let j = 0; j < arr1.length; j++) {
if (i >= j * 2) {
return true
}
}
}
预期结果:如果arr2
中的任何一项大于或等于arr1中任何一项的两倍,则返回true。
但是我正在寻找这个问题的线性解决方案。
答案 0 :(得分:1)
您可以取最小值array2
,取双值并检查最小值let array1 = [1, 2, 3, 4, 5],
array2 = [6, 7, 8, 9, 10],
result = Math.min(...array2) > 2 * Math.min(...array1);
console.log(result);
。
{{1}}
答案 1 :(得分:1)
您可以首先在第一个数组中找到绝对最小值,然后将其与第二个数组进行比较。
将其简化为O(arr1.length + arr2.length)
如果最小值的两倍大于arr2中的任何元素,则没有一个更低。
此代码似乎是错误的:
if (i >= j * 2)
{
return true
}
应该是
if (arr2[i] >= arr1[j] * 2)
{
return true
}
答案 2 :(得分:0)
由于需要布尔值结果,因此可以将some
与find
组合使用。
let arr1 = [1,2,3,4,5]
let arr2 = [6,7,8,9,10]
const num = arr2.some(num => arr1.find(x => num >= (x * 2)))
console.log(num);