【发布时间】:2014-05-02 23:30:52
【问题描述】:
以下是我解决以下问题的代码:
编写一个函数nearest_larger(arr, i),它接受一个数组和一个
指数。该函数应该返回另一个索引,j:这应该
满足:
(a)arr[i] < arr[j],并且
(b) 没有比j 更接近i 的j2,其中arr[i] < arr[j]。
如果出现平局,请选择最早的(最左边)
两个指数中。如果arr 中没有任何数字大于arr[i],
返回nil。
这是我的尝试:
def nearest_larger(arr, i)
k = 1
loop do
jleft = i - k
jright = i + k
if (arr[i] < arr[jleft]) && (jleft >= 0)
return jleft
elsif (arr[i] < arr[jright]) && (jright < arr.length)
return jright
elsif (jleft < 0) && (jright >= arr.length)
return nil
end
k += 1
end
end
这是真正的正确答案
def nearest_larger(arr, idx)
diff = 1
loop do
left = idx - diff
right = idx + diff
if (left >= 0) && (arr[left] > arr[idx])
return left
elsif (right < arr.length) && (arr[right] > arr[idx])
return right
elsif (left < 0) && (right >= arr.length)
return nil
end
diff += 1
end
end
虽然我的代码适用于我在使用某些组合时测试的许多值,例如:
x = [1,6,9,4,5]
puts nealest_larger(x, 4)
我收到此错误
calc.rb:8:in `<': comparison of Fixnum with nil failed (ArgumentError)
from calc.rb:8:in `block in nealest_larger'
from calc.rb:3:in `loop'
from calc.rb:3:in `nealest_larger'
from calc.rb:40:in `<main>'
谁能告诉我我的代码与实际答案有何不同,在我看来它的行为应该完全相同,但我一定错过了一些语法或忽略了一段逻辑。我需要另一双眼睛,因为我看不出有什么不同,谢谢!
【问题讨论】:
-
j2与条件 (b) 有何关系? -
我不明白你的问题