Сомнение 1:
Временная сложность рассчитывается по количеству выполненных операций. Неважно, сколько вложенных l oop там ...
Ваше первое while l oop выполнено до currentPosition <= n
и вложено, пока l oop выполнено до currentPosition <= n && x[currentPosition + 1] – x[lastPosition] <= L
.. В этом l oop вы увеличиваете currentPostion
. Таким образом, ваша общая операция не может превысить n
раз.
Пример:
array[0, 10, 20, 30]
и L = 50
..
В этом случае ваше первое while l oop true для 1-го шага .. Вы вложили l oop true для 4 шагов. Затем на 2-м шаге ваш первый, пока l oop false ... Итак, был выполнен шаг N ...
Вот почему ваш код сложен: O ( N )
...
Сомнение 2:
Чтобы минимизировать заправку, вам нужно go как можно дальше с текущим топливом. Если вы пересечете k
станцию с текущим топливом, то на 1 to k-1
станциях заправлять бак не нужно .. Каждую станцию вам нужно проверить, возможно ли go на следующую станцию с текущим топливом. Если вы можете go с текущей станции на следующую станцию с текущим топливом, то долить бак на текущей станции будет лишним.
Сомнение 3:
Есть много способов решить проблему .. . Вот еще один:
numRefills = 0
currentPosition = 0
currentFuel = L
while(currentPosition <= n){
if (currentFuel < x[currentPosition+1] - x[currentPosition]) {
currentFuel = L;
numRefills++;
}
currentFuel -= (x[currentPosition+1] - x[currentPostion]);
if ( currentFuel < 0 )
return Impossible;
currentPosition++;
}
return numRefills