Я пытаюсь решить проблему, в которой мне нужно найти элемент пика в горном массиве, который может содержать дубликаты. < /p>
Пиковой элемент-это тот, где значения сначала увеличиваются, а затем уменьшаются (но плато, такие как [6,6,6,6], может появиться после пика). Вот код, который я написал: < /p>
nums = [1, 3, 7, 6, 6, 6, 6, 6, 4, 3, 2, 1]
l = 0
r = len(nums) - 1
while l < r:
# Skip duplicates on the left
while l < r and nums[l] == nums[l + 1]:
l += 1
# Skip duplicates on the right
while l < r and nums[r] == nums[r - 1]:
r -= 1
m = (l + r) // 2
if nums[m] < nums[m + 1]:
l = m + 1
else:
r = m
print(nums[l]) # Expected output: 7
< /code>
Для ввода: < /p>
[1, 3, 7, 6, 6, 6, 6, 6, 4, 3, 2, 1]
< /code>
Я ожидаю, что пик будет 7, но выход выходит как 6. < /p>
Я подозреваю, что это из -за того, что плато путает логику двоичного поиска. Как я могу правильно обрабатывать дубликаты, особенно когда после пика есть длинная плоская секция?>
Подробнее здесь: https://stackoverflow.com/questions/796 ... search-not
Проблемы с поиском пика в горном массиве с дубликатами-бинарный поиск не работает, как и ожидалось ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение