注:本文所有代碼均經(jīng)過Python 3.7實際運行檢驗,保證其嚴(yán)謹(jǐn)性。
Python基礎(chǔ)練習(xí)題31:最少搜查次數(shù)
設(shè)有序表的關(guān)鍵字序列為[1, 4, 6, 11, 19, 35, 52, 54, 57, 71, 78, 86, 92, 96],當(dāng)用二分搜查法查找86這個結(jié)點時,最少經(jīng)過多少次才能查找成功?
解答:二分搜查法是常用的算法,其原理是從列表的中間元素開始,如果中間元素正好是要查找的元素,則搜索過程結(jié)束;如果某一特定元素大于或者小于中間元素,則在數(shù)組大于或小于中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。重復(fù)這個過程,直到找到要查找的元素為止。
本題因為要找的是次數(shù),所以加入count = 0作為計數(shù)變量,然后每查找一次都用count += 1來進(jìn)行計數(shù)。
l = [1, 4, 6, 11, 19, 35, 52, 54, 57, 71, 78, 86, 92, 96]
x = 86
def binary_search(l, x):
count = 0
low = 0
high = len(l) - 1
while low <= high:
mid = (low + high) // 2
count += 1
guess = l[mid]
if guess == x:
return (f"count = {count}.")
elif guess > x:
high = mid - 1
else:
low = mid + 1
print(binary_search(l, x))
<<<count = 4.
Python基礎(chǔ)練習(xí)題32:找到字符串中的第n個相同字符
給定一個字符串,里面多次出現(xiàn)字符'a',如何找到第n個字符'a'的索引位置index?
解答:
def search_nth_char(s, c, n):
"""
c: 給定要找的字符,題意是'a'。
s: 給定要從中查找的字符串。
n: 一個正整數(shù)int,小于等于len(s)。
"""
l = []
for i in range(len(s)):
if s[i] == c: #把原始字符串s中所有字符c的索引位置index都找出來,并放入列表l中。
l.append(i)
return f"字符串{s}中,第{n}個字符{c}的索引位置index為{l[n-1]}。"
s = 'abcabcabc'
c = 'a'
n = 3 #第3個'a'字符串對應(yīng)s的原始索引位置index為6,即第7個字符串。
print(search_nth_char(s, c, n))
<<<字符串a(chǎn)bcabcabc中,第3個字符a的索引位置index為6。
To be continued.