题目描述
对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1
题目来源:去哪儿
题意分析:注意特殊的情况,例如:一个数列中都是相同的元素,此时的话,应该输出的是第0位,所以说,找到以后不能直接终止,要继续往前遍历,直到不相等为止,返回最开始相等的一样。
# -*- coding:utf-8 -*-
class BinarySearch:
def getPos(self, A, n, val):
# write code here
if len(A) == 0:
return None
def Binary_Search(res, num):
x = None
l = 0
r = num - 1
while l <= r:
mid = (l + r) // 2
if A[mid] == val:
x = mid
r = mid - 1
continue
if A[mid] > val:
r = mid - 1
if A[mid] < val:
l = mid + 1
return x
return Binary_Search(A, n)
def main():
a = BinarySearch()
print a.getPos(range(10), 10, 4)
print a.getPos([1, 1, 1, 1, 1], 5, 1)
print a.getPos([11, 27, 28, 33], 4, 28)
if __name__ == "__main__":
main()