Я делаю небольшую подготовку к курсу, который я хочу взять. Один из вопросов, который они задают в качестве практики, следующий:Как найти ближайший более крупный элемент к другому элементу массива?
Напишите функцию, nearest_larger(arr, i)
, которая принимает массив и индекс . Функция должна возвращать другой индекс, j
: это должно удовлетворять :
(а) arr[i] < arr[j]
и (б) нет j2
ближе к i
, чем j
, где arr[i] < arr[j]
.
В случае галстуков (см. Пример ниже), выберите самый ранний (самый левый) из двух индексов. Если число в arr
больше, чем arr[i]
, возвращение nil
.
Так код, который я написал, было:
def function(arr,i)
k = arr.length
puts "nil" if arr.all? {|number| arr[i] >= number}
(0..(arr.length-1)).to_a.each do |j|
if arr[j] > arr[i]
k = j if((i-j).abs < k) ##
end
end
puts k
end
Этот function([1,2,6,5,10],3)
возвращает 4, когда он должен быть вернуться 2.
У меня возникают проблемы адресации сценарий, когда есть связь. Я думал, что я разработал свой код для этого (я помещаю ##, где, на мой взгляд, это исправлено). Потому что ему нужно назначать индекс k, если расстояние строго меньше, поэтому я не знаю, почему он вернет право боковая сторона. Я надеюсь, что в этом есть смысл. Любая помощь приветствуется.
Вы, вероятно, хотите, чтобы прочитать на [ 'index'] (http://www.ruby-doc.org/core-2.1.2/Array.html#method-i-index), который, если giv в блоке, делает большинство из того, что вы хотите. – tadman