对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。
给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
测试样例:
[1,3,5,7,9],5,3
返回:1
class BinarySearch: def getPos(self, A, n, val): # write code here if n == 0: return -1 left, right = 0, n - 1 while left <= right: mid = (left + right) // 2 if A[mid] == val: while A[mid - 1] == val: # 处理某元素多次出现的情况 mid -= 1 return mid elif A[mid] > val: right -= 1 else: left += 1 return -1
class BinarySearch: def getPos(self, A, n, val): # write code here left = 0 right = n - 1 while(right>=left): mid = (left + right) / 2 if(A[mid] == val): while(mid>=0 and A[mid] == val): mid -= 1 return mid + 1 elif(A[mid]>val): right = mid - 1 else: left = mid + 1 return -1
#####正常解法 class BinarySearch: def getPos(self, A, n, val): left,right=0,n-1 while left<right: mid=(left+right)/2 if A[mid]==val: right=mid#若该元素出现多次,请返回第一次出现的位置。 elif A[mid]>val: right=mid-1 else: left=mid+1 if A[left]==val: return left else: return -1 ###非正常解法 class BinarySearch: def getPos(self, A, n, val): if val in A: return A.index(val) else: return -1