Ruby 检查一个数组中的任何数字是否小于另一个数组中的某个数字
这似乎是一个相当普遍的问题。遗憾的是,我没能找到这样的衣服。如果这是一个重复的问题;我为此道歉 假设我有两个整数数组Ruby 检查一个数组中的任何数字是否小于另一个数组中的某个数字,ruby,Ruby,这似乎是一个相当普遍的问题。遗憾的是,我没能找到这样的衣服。如果这是一个重复的问题;我为此道歉 假设我有两个整数数组A和B: A = [17, 3, 9, 11, 11, 15, 2] B = [1, 13] 如果数组a的任何元素小于数组B的任何元素,我需要返回true或false A.sort! B.sort! def is_greater?(a,b) retVal = false i = 0 j = 0 while (i < a.length && j
A
和B
:
A = [17, 3, 9, 11, 11, 15, 2]
B = [1, 13]
如果数组a
的任何元素小于数组B
的任何元素,我需要返回true或false
A.sort!
B.sort!
def is_greater?(a,b)
retVal = false
i = 0
j = 0
while (i < a.length && j < b.length)
if (a[i] < b[j])
retVal = true
break
elsif (a[i] == b[j])
i = i + 1
j = j + 1
else
j = j + 1
end
end
return retVal
end
is_greater?(A,B) => true
实现这一点的简单方法是使用2个each循环(O(n^2)
complexity)
我想知道是否有一种高效、精确的方法可以在代码行方面做到这一点。我试图弄清楚如何使用
any?
块,但对我来说没有任何意义 是的,您可以使用可枚举方法#任何?和#min
对于中的每个项目,如果小于最大值,则返回true:
max = b.max
a.any?{|x| x < max}
max=b.max
a、 任何?{x}x
只需检查第一个数组的最小值和第二个数组的最大值就足够了
a.min < b.max
a.min
此条件返回false的唯一方法是,如果每个元素都是b
小于a
中的每个元素
复杂性是O(m+n),这是通过
a
和b
进行的单次迭代,至少是其线性解,而不是我提出的O(nlogn)和O(n^2)解。感谢最大值缓存,当m~=n
时,tipIt实际上是O(2n)=O(n)
(带常数的产品规则),而不是O(n logn)
。这和另一个解决方案是一样的。@texasbruce我不知道你是否在谈论我的解决方案,但如果你是,我同意它会降低到与另一个答案相同的复杂性。但是m=len(a)和n=len(b),这不是O(2n),因为n只能表示一个数组的长度。@texasbruce O(n logn)是我给出的排序解决方案的复杂性,tcople的解决方案的复杂性是O(m+n)。。本质上linear@TCopple问题是,任何元素,而不是每一个元素都必须小于Thank!我将此解决方案与@tcople提供的最大值存储建议一起使用
a.min < b.max