检查一个数组中的任何数字是否小于另一个数组中的某个数字

时间:2012-04-04 18:04:09

标签: ruby

这似乎是一个非常常见的问题。可悲的是我无法在SO上找到它。如果这是一个重复的问题;我为此道歉。

假设我有两个整数数组AB

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?块,但它对我没有任何意义。

2 个答案:

答案 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),它是ab的单次迭代。