[英]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.