2013-05-12 34 views
-2

我有两个数组,max_of_row(它存储每行中的最大值)和min_of_col(它存储每个col中的最小值)。简明的方法来找到潜在的零值的最大/最小值

我将它们初始化为max_of_row = []和min_of_col = []。

这是我如何填充它现在:

max_rows = [] 
    min_cols = [] 
    for i in 0..mat.length-1 
    for j in 0..mat[0].length-1 
     val = mat[i][j] 
     max_rows[i] = [max_rows[i] || val, val].max 
     min_cols[j] = [min_cols[j] || val, val].min 
    end 
    end 

它看起来怪异,我使用:[MAX_ROWS [I] || val,val] .max。有没有更好的方法来做到这一点?

之前,我有:

if max_rows[i].nil? || max_rows[i] < val 
    max_rows[i] = val 
    end 
    if min_rows[j].nil? || min_cols[j] > val 
    min_cols[j] = val 
    end 

这(我认为)是更糟,因为它是更长的时间。我是否应该尝试改变这些?如果是这样,有没有更好的方式来做到这一点?

EDIT

下面是一个阵列的一个例子:

mat = 
    [[2, 5, 10], 
    [3, 4, 7], 
    [6, 10, 9]] 

EDIT

以下是预期值:

max_of_row = [10, 7, 10] 
min_of_col = [2, 4, 7] 
+0

给我们2个输入数组 – 2013-05-12 18:31:05

+0

好吗!你想要的输出是什么?它在上面写着。我们没有时间分析你的代码。 – 2013-05-12 18:48:27

回答

1
max_rows = mat.map(&:max) 
# => [10, 7, 10] 

min_cols = mat.transpose.map(&:min) 
# => [2, 4, 7] 
+0

看来我们在比赛中,没有告诉OP提供更多的信息给他们答案,猜测的力量。不是很好。我们正在使这样的OP的习惯很糟糕。 – 2013-05-12 18:47:16

+2

也许一个“紧凑”的电话会是一个很好的补充,因为他说可能没有'零'值。 – squiguy 2013-05-12 19:32:29

+0

@squiguy不,你错误地解释了这一点。由于OP正在采用的特定算法,即当它是第一个记录为max_rows [i]或min_cols [j]的元素时,OP提到'nil',因此没有以前的值进行比较。您在评论之前需要更加小心。 – sawa 2013-05-12 20:04:53

相关问题