为了准备迎接挑战,我正试图在ruby上解决一堆“简单”的问题。但是,对我来说它们并不容易:P。
问题是 - >
# Write a function, `nearest_larger(arr, i)` which takes an array and an
# index. The function should return another index, `j`: this should
# satisfy:
#
# (a) `arr[i] < arr[j]`, AND
# (b) there is no `j2` closer to `i` than `j` where `arr[i] < arr[j]`.
#
我不想看答案年份,所以到目前为止我已经知道了以下代码 -
def nearest_larger(arr, i)
j = 0
k = i+1
larger_hash = {}
while j < i
larger_hash[arr[j]] = j if arr[i] < arr[j]
j +=1
end
while k < (arr.count - 1) do
larger_hash[arr[k]] = k if arr[i] < arr[k]
k+=1
end
max_value = larger_hash.keys.max
end
nearest_larger([3, 5, 6, 14, 20, 18], 2)
我很确定会有一些美丽而简单的方法来回答这个问题,但是,我不知道为什么我的解决方案会吐出NoMethodError。
任何帮助非常感谢
答案 0 :(得分:0)
我认为你的主要问题是你的方法中的语法错误导致它没有被定义,所以当你试图稍后调用它时就找不到它。
语法错误的原因是使用大括号{}
代替方括号[]
来访问哈希内的键。
在这方面不要被perl
混淆。
访问哈希值不同
in perl: some_hash{a_key}
in ruby: some_hash[a_key]
这可能看起来很奇怪,因为它们都使用大括号来表示哈希文字:
分配空哈希文字是相同的
in perl: some_hash = {}
in ruby: some_hash = {}
答案 1 :(得分:0)
您的问题已在上面得到解答。您可能希望考虑编写方法的其他方法,以更好地利用Ruby的表现力,例如我在下面建议的内容。由于这不能解答您的问题,我考虑将其移至上面的注释,但注释并非真正用于多行代码,并且多行代码无法在注释中正确格式化。
def nearest_larger(arr, i)
# maybe check for i.abs >= arr.size
a = arr.each_with_index.sort.map {|v , idx| v}
j = a.index(arr[i])
return arr.index(a[j+1]) if j+1 < arr.size
nil
end