2015-09-04 4 views
0

У меня есть алгоритм, основанный на проблеме, когда вам нужно найти минимальное количество прыжков, чтобы добраться до конца массива. Эта проблема была задана у выродков для geeks и у них нет линейного алгоритма времени, в моем случае алгоритм находится в линейном времени, но , для которого тестовый случай завершит мой алгоритм? .The ссылку для задачиПроверить правильность алгоритма для минимального числа переходов в массиве

Ссылка: - http://www.geeksforgeeks.org/minimum-number-of-jumps-to-reach-end-of-a-given-array/

Входной сигнал: обр [] = {1, 3, 5, 8, 9, 2, 6, 7, 6, 8, 9}

  • Начиная с первого элемента, мы знаем, что максимальный диапазон элемента 1, следовательно, мы можем двигаться только один шаг вперед, так из 1-> 3

  • Теперь на втором этапе мы знаем диапазон элемент 3, следовательно, с этого шага мы вычисляем max из этого диапазона, поэтому от 3 мы можем либо выбрать 5,8,9, а максимум в этом диапазоне 9

  • Итак, сначала перейдите к 9, что 1-> 3-> 9, а затем из 9 мы движемся к концу массива, поскольку мы знайте, что девять шагов более чем достаточно, чтобы достичь цели.

  • Угловой корпус: если мы обнаруживаем нуль в конце, мы ничего не делаем, поскольку мы уже достигли конца. Но если в начале или в диапазоне, где 0 - максимальный элемент в этом диапазоне, для продвижения вперед мы возвращаем -1, поскольку мы не можем двигаться дальше , пожалуйста, скажите, есть ли ошибка в этом алгоритме.

+1

ожидание на SO что вы бы попытаться решить эту проблему (в том числе {псевдо} кода), и мы попытается помочь вам, если это не удастся. Наша задача - не отлаживать вас, прежде чем вы это сделаете. – KevinDTimm

ответ

1

Да, этот алгоритм не работает. Пример:

arr[] = {5,2,1,1,1,1,1} 

Ваш алгоритм увидит 5, то увидите максимальное число 2, а затем перейти к 1 1 1 1. То есть: 5,2,1,1,1,1 = 6 скачками.

Хотя оптимальный результат: 5 -> 1 (второй с конца) -> 1 = 3 скачки

Смежные вопросы