[英]smallest letter greater than target
我编写了一个代码,目的是返回target
字母h
之后的最小字母,所以在这种情况下,它是i
。 但是,下面的代码不会产生 output。 有任何想法吗? 我感觉问题出在第一个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
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'
# Find only after target
letters = letters[letters.index(target):]
# Remove target from list
letters = [x for x in letters if x != target]
# Sort list
letters.sort()
# Find char representation of lowest
print(letters[0])
如果你喜欢单线
letters[len(letters) - letters[::-1].index('h')]
代码从反向列表中获取第一个字母“h”的索引,并使用它找到字母“h”之后的第一个
right = len(letters) -1
这将始终返回相同的答案,因为它始终计算数组中的字母数:
OrderedDict
可用于创建有序唯一列表,此列表可用于获取目标元素索引。
from collections import OrderedDict
ordered_unique_list=list(OrderedDict.fromkeys(letters))
print(ordered_unique_list[ordered_unique_list.index(target)+1])
Output
i
这样就可以了;)
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) // 2
while left <= right:
if letters[mid] == target:
for i in range(mid, len(letters)):
if letters[i] != target:
print(letters[i])
break
break
if letters[mid] < target:
left = mid + 1
elif letters[mid] > target:
right = mid - 1
mid = (left + right) // 2
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.