leetcode 二分法 总结

423 阅读1分钟

二分法总结 适用类型 数据量较大,数据是排好序的 模板:

  1. 定义左右两个index 左初始化最开始的一端 右设置为最末一端
  2. 循环条件 left <= right
  3. 定义mid = (right + left) >> 1
  4. 判断当前位置mid是否满足条件,满足直接return
  5. 若不满足,当前计算值大于要求值,修改右收敛条件,left = mid - 1
  6. 当前计算值小于要求值,修改右收敛条件,right = mid + 1
  7. 如果在循环条件内还没有满足条件,说明无条件满足,return false

简单用一下 (leetcode-cn.com/problems/va…)

leetcode 367 给定一个 正整数 num ,编写一个函数,如果 num 是一个完全平方数,则返回 true ,否则返回 false 。 进阶:不要 使用任何内置的库函数,如  sqrt 。

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/va… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

func isPerfectSquare(num int) bool {
    r, l := 0, num
    for r <= l {
        mid := (r + l) >> 1
        res := mid*mid
        if res == num {
            return true
        }
        if res > num {
            l = mid - 1
        } else {
            r = mid + 1
        }
    }
    return false
}