Работаем по следующему алгоритму:
Учитывая массив неотрицательных целых чисел, вы изначально занимаетесь первым индексом массива.
Каждый элемент в массиве представляет вашу максимальную длину прыжка в этой позиции.
Определите, можете ли вы достичь последнего индекса.
Например:
A = [2,3,1,1,4]
, вернутьtrue
.A = [3,2,1,0,4]
, вернутьfalse
.
Ниже мое решение. Он пробует каждый потенциальный шаг, а затем соответствующим образом запоминает. Итак, если первый элемент равен трем, код выполняет три шага, два шага и один шаг, а оттуда запускает три отдельные функции. Затем я запомнил с помощью хеша. Моя проблема в том, что код работает отлично, но время ожидания очень велико. Воспоминания помогли, но совсем немного. Правильно ли я запоминаю или ошибаюсь здесь?
def can_jump(nums)
@memo = {}
avail?(nums, 0)
end
def avail?(nums, index)
return true if nums.nil? || nums.empty? || nums.length == 1 || index >= nums.length - 1
current = nums[index]
true_count = 0
until current == 0 #try every jump from the val to 1
@memo[index + current] ||= avail?(nums, index + current)
true_count +=1 if @memo[index + current] == true
current -= 1
end
true_count > 0
end
true
илиfalse
. Я предложу решение, которое сделает это. - person Cary Swoveland   schedule 23.02.2017