как найти наибольшее значение в массиве без использования каких-либо перечисляемых?

#ruby

#ruby

Вопрос:

 nums = [4, 6, 8, 7]
until num[index] == nil
    if num[index] > num[index   1]
      puts num[index] 
      index  = 1
    elsif
      index = index   1
    end
    
  

По какой-то причине я получаю вывод:

8

Обратная трассировка (последний последний вызов): 1: из main.rb:21:in <main>' main.rb:21:in >’: ошибка сравнения целого числа с нулем (ошибка аргумента)

Не уверен, как исправить код, чтобы не получить ArgumentError .

Комментарии:

1. Вам нужен другой if, чтобы проверить, nums[index 1] не равно ли оно nil , в противном случае вы получите эту ошибку, поскольку вы не можете сравнивать целые числа с объектами Nil.

2. Хорошо, я пытался реализовать другой оператор if, как вы сказали, но я все еще получаю ту же ошибку. Можете ли вы быть более конкретным?

3. Конечно until nums[index] == nil; if nums[index 1]; if nums[index] > nums[index 1]; puts nums[index]; end; end; index = 1; end .

Ответ №1:

Вы могли бы использовать sort plus last :

 [4, 6, 8, 7].sort.last # 8
  

оба метода массива.

Ответ №2:

Мы, конечно, должны сохранить вычислительную сложность на уровне O( nums.size ) (выполнив один проход по массиву). Мой друг @Sergio указывает, что не может быть ничего проще, чем

 nums.max
  #=> 8
  

который использует метод Array#max. Это также будет хорошо работать в Code Golf.

Комментарии:

1. придирка: это начальное значение подведет вас, если nums оно пустое.

2. И если мы можем использовать Array#max , почему бы не использовать его дальше nums ? 🙂

Ответ №3:

Это должно сработать, оно вернет наибольшее значение в массиве:

 nums = [4, 6, 8, 7]
index=0
until index==nums.length-1  #
  if nums[index] > nums[index   1]
    largest= nums[index] 
    index  = 1
  else
    index = index   1
  end
end
puts largest

  

Комментарии:

1. Я знаю. Но я спрашиваю, как это сделать без перечисляемых.

2. Карен, какой перечислимый метод ты имеешь в виду?

3. @Karen: Array#max определяется в Array , а не в Enumerable .