【數據結構】二分查找問題

Description:

給定一個遞增正整數數組和一個要查找的整數target,用二分搜索法查找到給定元素target第一次出現的下標(從0開始),如果target不存在於數組中,返回-1。PS:如若存在多個target,返回target在序列中第一次出現的位置。

Input:

首先輸入一個正整數N,代表接下來將輸入N組測試數據;

然後接下來將分別輸入每組數組nums作爲測試數據;

再輸入每組待查找的元素target。

Output:

分別輸出每組數據查找結果。

# Filename: Midsort.py
n = int(input())    # 輸入序列數
a = []              # 儲存各序列
length = []         # 各序列長度
for i in range(0, n):
    a = a + [list(map(int, input().split(',')))]
    length.append(len(a[i]))
target = []         # 待查找的元素
for i in range(0, n):
    target.append(int(input()))

for i in range(n):
    head = 0
    end = length[i]+1
    mid = (head + end) //2
    found = 0
    while head != mid:
        if a[i][mid-1]>target[i] or a[i][mid-2] == target[i]:
            end = mid
            mid = (head + end) //2
            continue
        if a[i][mid-1]<target[i]:
            head = mid
            mid = (head + end) //2
            continue
        if a[i][mid-1] == target[i]:
            found = 1
            print(mid-1)
            break
    if found == 0:
        print(-1)

Bugs you may write:

1.嘗試下1,2,3,4,4,4,4,4這樣的序列,如果搜索4的話,你返回的是3嗎?

2.試試搜索一個序列兩端的數據,你搜得到嗎?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章