首页 > 试题广场 >

二分查找

[编程题]二分查找
  • 热度指数:62595 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。

给定一个整数数组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

发表于 2022-06-24 20:18:30 回复(0)
class BinarySearch:
    def getPos(self, A, n, val):
        i = 0
        result = []
        while i<=n:
            if A[i]==val:
                result.append(i)
                break
            else:
                i+=1
        if len(result)==0:
            return -1
        else:
            return min(result)

发表于 2022-06-22 11:38:47 回复(0)
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

发表于 2019-03-18 19:07:48 回复(0)
#####正常解法
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

发表于 2018-07-12 15:38:58 回复(0)
return A.index(val) if val in A else -1

Python one line solution. Life is short ,I use python.

编辑于 2017-09-12 13:50:53 回复(1)