Python隨筆33:Python基礎(chǔ)編程練習(xí)題31~32

:本文所有代碼均經(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.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容