如何在矩阵中找到最大为1的行

时间:2018-10-22 07:29:05

标签: arrays ruby

我有一个带有布尔值的矩阵:

require 'matrix'
m1 = Matrix[[0,1,1,1],[0,0,1,1],[1,1,1,1],[0,0,0,0]]

我想找到最多1个行。谁能帮我吗?

3 个答案:

答案 0 :(得分:5)

最简单的方法可能是

m1.row_vectors.max_by { |e| e.count(1) }
#=> Vector[1, 1, 1, 1]

答案 1 :(得分:0)

最佳解决方案:-从右上角开始检查并遍历矩阵的左侧,直到得到1。遇到0时,遍历矩阵并重复。

row = nil
j = m1.row_count - 1
(0...m1.row_count).each.with_index do |i|
  while m1[i,j] == 1 do
    row = i
    j -= 1
  end
end
puts row

假设:
1.行已排序。
2.它是nxn矩阵。

有关更多信息,请参见this

答案 2 :(得分:0)

m1.row_vectors.max_by(&:sum)
  #=> Vector[1, 1, 1, 1]

m1.to_a.max_by(&:sum)
  #=> [1,1,1,1]

取决于要求。