Учитывая последовательность шагов вверх и вниз. Найдите и верните количество долин в заданной последовательности. Мы всегда начинаем и заканчиваем на уровне моря, и каждый шаг вверх или вниз представляет собой единицу изменения высоты.
- Гора - это последовательность последовательных шагов над уровнем моря, начиная с шага вверх от Уровень моря и заканчивающийся шагом вниз до уровня моря
- Долина - это последовательность последовательных шагов ниже уровня моря, начиная с шага вниз от уровня моря и заканчивая шагом вверх до уровня моря.
Пример: Если путь 'DDUUUUDD', сначала мы входим в долину глубиной в две единицы. Затем мы поднимаемся на гору высотой в две единицы. Наконец мы возвращаемся к уровню моря. Поэтому мы возвращаем единицу.
Вопрос: Является ли временная сложность данного решения O (n / 2) или O (n), и как оператор if изменяет сложность алгоритм?
Решение:
def countingValleys(n, s):
altitude = 0
prev_a = 0
v_count = 0
for i in range(1, n, 2):
if s[i] == s[i-1]:
if s[i] == 'D':
altitude -= 2
prev_a = altitude + 1
else:
altitude += 2
prev_a = altitude - 1
else:
if s[i] == 'D':
prev_a = altitude + 1
else:
prev_a = altitude - 1
if altitude == 0 and prev_a == -1:
v_count += 1
return v_count