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