【发布时间】:2021-04-08 07:00:45
【问题描述】:
我编写了一个代码,旨在返回target 字母h 之后的最小字母,所以在这种情况下,它是i。但是,下面的代码不会产生输出。有任何想法吗?我感觉问题出在第一个 if 声明中。
letters = [
'a',
'b',
'c', 'c', 'c', 'c',
'd',
'e', 'e', 'e',
'g',
'h', 'h', 'h',
'i',
'j',
'k', 'k', 'k',
'l',
'm',
'n',
'o',
'p', 'p', 'p',
'q',
'r',
's', 's',
't'
]
target = 'h'
left = 0
right = len(letters) - 1
mid = left + (right - left) // 2
while left < right:
if mid == target:
for i in range(letters[mid], letters[len(letters)]):
if letters[i] != target:
print(letters[i])
break
if letters[mid] < target:
left = mid + 1
elif letters[mid] > target:
right = mid - 1
【问题讨论】:
-
您需要在
while循环内(重新)计算mid,否则它始终保持其初始值。 -
不相关,但您可以定义
letters = 'abccccdeeeghhhijkkklmnopppqrsst'并仍将其用作数组。 -
你可以用一个班轮
letters[len(letters) - letters[::-1].index('h')]