Учитывая список, который можно разбить на две части: L [: z] и L [z:], так что первая не увеличивается, а вторая не уменьшается и может содержать или не содержать дублирующиеся элементы, создатьфункция такая, что:
Ввод:
- Список L, как указано выше
- Значение k, которое представляет максимальное числораз любое заданное значение повторяется в списке
Вывод:
- Минимальное значение списка
Сложность и требования
- O (log n)
- Можно использовать только встроенные библиотечные функции, не включая min / max
У меня есть следующее:
def findmin(L, k = None):
left = 0
right = len(L)-1
foundmin = False
while not foundmin:
mp = (left + right)//2
if L[mp] > L[mp+1]:
left = mp
elif L[mp-1] < L[mp]:
right = mp+1
else:
return L[mp]
Это работает только для некоторых списков, таких как: L = [9,9,4,3,2,1,7,7,10,10]
Но он не работает правильно для списков, таких как: L = [6,5,4,3,3,3,3,3,3,3,3,3,1,7,7,7,7]
Я пытался изменить функцию, чтобы приспособить повторяющиеся элементы, но безрезультатно.Я также не вижу полезности ввода k для функции.Мысли