題目描述
假設乙個單調遞增的陣列中的每個元素都是整數並且是唯一的。請程式設計實現乙個函式,找出陣列中任意乙個數值等於其下標的元素,例如在陣列【-3,-1,1,3,5】中,3和他的下標相等。
採用二分查詢:如果陣列中的數字小於下標,由於下標是-1的遞減數列,但是陣列中的元素差值大於等於-1,因此左邊的不可能等於下標。如果陣列中的數字大於下標,同理,之後的數字肯定都大於下標,往左邊查詢。
class
solution
:def
numberequalsubscript
(self, numbers)
:if numbers ==
:return-1
left =
0 right =
len(numbers)-1
while
(left <= right)
: middle =
(left + right)
>>
1if numbers[middle]
== middle:
return middle
elif numbers[middle]
< middle:
left = middle +
1else
: right = middle -
1return-1
numbers =[-
3,-1
,1,3
,5]print
(solution(
).numberequalsubscript(numbers)
)
陣列中數值和下標相等的元素
假設乙個單調遞增的陣列裡的每個元素都是整數並且是唯一的,請程式設計實現乙個函式,找出陣列中任意乙個數值等於其下標的元素。例如在陣列中,數字3和它的下標相等。從左到右遍歷陣列,逐個判斷數字和下標是否相同,時間複雜度為o n 使用二分查詢,如果數字大於下標在陣列左邊查詢 數字小於下標在陣列右邊查詢。pu...
AcWing 69 陣列中數值和下標相等的元素
假設乙個單調遞增的陣列裡的每個元素都是整數並且是唯一的。請程式設計實現乙個函式找出陣列中任意乙個數值等於其下標的元素。例如,在陣列 3,1,1,3,5 中,數字3和它的下標相等。樣例輸入 3,1,1,3,5 輸出 3注意 如果不存在,則返回 1。由於陣列是單調遞增的,所以可以用二分查詢。通過比較數值...
二分查詢(簡單版) 陣列下標表示
如果不是從一組隨機的序列裡查詢,而是從一組排好序的序列裡找出某個元素的位置,則可以有更快的演算法 例 11.4.折半查詢 include define len 8 int a len int binarysearch int number return 1 int main void 由於這個序列已...