二分查找

二分查找的特点:

  1. Sorted (单调递增或者递减)
  2. Bound (存在上下界)
  3. Accessible by index (能够通过索引进行访问)
    下面是一个常用的代码段
left, right = 0, len(array) - 1 
while left <= right:
    mid = (left + right) / 2 
    if array[mid] == target:
        return result 
    elif array[mid] < target:
        left = mid + 1 
    else:
        right = mid - 1 

leetcode-29 sqrt(x) 题目要求
Compute and return the square root of x, where x is guaranteed to be a non-negative integer.
Since the return type is an integer, the decimal digits are truncated and only the integer part of the result is returned.
注意事项:

  1. 在计算时,是需要向下取整的,所以不能仅仅通过比较阈值来确定平方根;
  2. 由于题目本身的特殊性,大多数的开方是小于这个数的二分之一,所以在这里用了一个res 来保存左边界的值。
class Solution:
    def mySqrt(self, x: int) -> int:
        left, right = 1, x
        res = 0
        while left<= right:
            mid = (left + right) // 2
            if mid == x // mid :
                return mid 
            elif mid > x //mid :
                right = mid - 1 
            elif mid < x// mid :
                left = mid+1
                res = mid 
        
        return res 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 二分查找作为程序员的一项基本技能,是面试官最常使用来考察程序员基本素质的算法之一,也是解决很多查找类题目的常...
    Jesse1995阅读 2,246评论 0 0
  • 原文链接: 点这里更多内容就在我的个人博客 BlackBlog.tech 欢迎关注!谢谢大家! 本文源自LeetC...
    BlackBlog__阅读 3,303评论 2 13
  • 二分查找又称折半查找,实际操作时,在排好序的队列中,每次取中间位置值与目标值对比,由于已经排序,无论对比结果如何都...
    s1991721阅读 675评论 0 2
  • 将原本是线性时间提升到了对数时间log(N)范围,大大缩短了搜索时间 前提,必须在有序数据中进行查找。 1. 最基...
    惊不意外阅读 3,672评论 0 3
  • 本文首发于我的个人博客:尾尾部落 二分查找法作为一种常见的查找方法,将原本是线性时间提升到了对数时间范围,大大缩短...
    繁著阅读 29,519评论 3 9