В настоящее время я работаю над алгоритмами с целью улучшения моих навыков.Прямо сейчас я застрял с проблемой, которую я не могу выбросить из головы.
Это выглядит так:
Я получаю 100 наборов конфигураций, каждая из которых содержит массив чисел, которые напоминаютвысота небоскреба.Теперь мне нужно найти небесный скребок в этом массиве, который позволяет с наилучшей точки зрения запускать ракету.
При условии, что все последующие здания должны быть выше (не могут быть одинаковой высоты), чем то, с которого они началивысота первого здания после небоскреба, с которого запускается ракета, не имеет значения.Что имеет значение, так это высота следующих зданий.
Например:
Input: 5 4 3 4 5
Наилучший небоскрёб для запуска - 3, потому что есть всего 4 небоскреба, которые имеютвид на этот небоскреб.
Вывод будет 4
У меня есть реализация O (n ^ 2), но она слишком медленная для обработки тысяч скребков неба ...
# read all configurations
while configs > 0:
count = int(input())
h = list(map(int, str(input()).split()))
if buildings_count > 1:
if allValuesAreSame(h):
results.append(2 if count > 2 else 1)
else:
places = [0 for x in range(buildings_count)]
for sample_index in range(count):
last_high = -1
for i in range(count):
if i == sample_index:
last_high = -1
else:
if i < sample_index:
if last_high == -1:
last_high = h[i]
places[sample_index] += 1
else:
if h[i] < last_high:
last_high = h[i]
places[sample_index] += 1
elif i > sample_index:
if last_high == -1:
last_high = h[i]
places[sample_index] += 1
else:
if h[i] > last_high:
last_high = h[i]
places[sample_index] += 1
results.append(max(places))
else:
results.append(0)
print(f'{results[-1]}')
configs -= 1
Кто-нибудь знает, как оптимизировать этот алгоритм?Я работаю над этим уже несколько дней и не знаю, как его оптимизировать.