leetcode 69题 思考关于二分查找的模版
Posted 萝卜er
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 69题 思考关于二分查找的模版相关的知识,希望对你有一定的参考价值。
leetcode 69,
Implement int sqrt(int 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.
注意看代码里面的注释
class Solution { public int mySqrt(int x) { if (x<=1) return x; long left = 0; long right = x; while (left < right) { long mid = (left + right + 1)/2; if (mid * mid == x) { return (int)mid; } else if (mid * mid < x) {//关键就是当mid*mid < x的时候,mid可不可能成为结果,这道题里面答案显然是可能的, 但是对275来说就不是这样了, 因为必须是至少h个大于h的才行,所以应该用 mid = (left + right)/2 left = mid + 1; right = mid; left = mid; } else { right = mid - 1; } } return (int)(left); } }
二分模版
1. 开始对于特殊情况, len <= 1的情况做特殊处理。
2. 模版一 mid = (left + right)/2; left = mid + 1; right = mid; leetcode 275题, 模版二 mid = (left + right + 1)/2; left = mid; right = mid - 1; 应用于leetcode 69
3. 对于一定有解的情况直接返回即可, 如果可能没有结果的,最后一定要对left进行检验( 这个操作可能没用,但是不会有坏处 )
以上是关于leetcode 69题 思考关于二分查找的模版的主要内容,如果未能解决你的问题,请参考以下文章
❤️ 互联网大厂面试高频算法题汇总 ❤️ —— ❤️ 二分专场 ❤️