二分搜索

二分搜索提醒:
取得中点写法:

常规写法:mid=(left+right)/2

由于上述写法可能造成溢出,更安全的写法:mid=left+(right-left)/2

案例一:对于一个有序数组arr,再给定一个整数num,请在arr中找到num这个数出现的最左边的位置。

给定一个数组arr及它的大小n,同时给定num。请返回所求位置。若该元素在数组中未出现,请返回-1。

# -*- coding:utf-8 -*-

class LeftMostAppearance:
    def findPos(self, arr, n, num):
        # write code here
        if not arr:
            return -1
        left = 0
        right = n-1
        while left<right:
            mid = left+(right-left)/2
            # 由于取的是下限,为保证最后能和right指针重合,所以当小于时需要多移动一位
            if arr[mid]<num:
                left = mid+1
            # 同样为了保证left和right重合,需要在arr[mid]>=num时(注意等号)将mid直接赋给right
            if arr[mid]>=num:
                right = mid
         # 最后得到的就是最左边等于num的数字。
        if arr[left] != num:
            return -1
        return left
全部评论

相关推荐

dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务