这似乎是一个非常常见的问题。可悲的是我无法在SO上找到它。如果这是一个重复的问题;我为此道歉。
假设我有两个整数数组A
和B
:
A = [17, 3, 9, 11, 11, 15, 2]
B = [1, 13]
如果数组A
的任何元素小于数组B
的任何元素,我需要返回true或false。
执行此操作的简单方法是使用2个循环(O(n^2)
复杂度)
def is_greater?(a,b)
retVal = false
b.each { |element|
a.each { |value|
if (value < element)
retVal = true
break
end
}
}
return retVal
end
is_greater?(A,B) => true
我还整理了两个数组中的元素,然后使用单个while循环来确定A
中的元素是否小于B
中的元素。
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
我想知道在代码行方面是否有一种高效,精确的方法。我试图找出如何使用any?
块,但它对我没有任何意义。
答案 0 :(得分:18)
是的,您可以使用Enumerable方法#any?和#min
对于a中的每个项目,如果小于max,则返回true:
max = b.max
a.any?{|x| x < max}
答案 1 :(得分:5)
只需检查第一个数组的最小值与第二个数组的最大值即可。
a.min < b.max
此条件返回false的唯一方法是,每个元素b
小于a
中的每个元素。
复杂度为O(m + n),它是a
和b
的单次迭代。