LeetCode 367[有效的完全平方数]
题目
链接
详情
实例
提示
题解
思路[二分查找]
求算术平方根,逐渐遍历的话,数值小应该是没问题的,但是数值大的话时间应该会超出限制
本质是:给定一个数字,在范围内找一个数字的平方为该数,找到了则输出ture,找不到则输出false
转换一个思路,即给定一个数字,在范围内找出该数,也就是查找问题,最基本的方法就是二分查找
初始值设定最小值 iMin 为 0,最大值 iMax 为给定值 num
开始循环:
求取中间值 iMid = (iMin + iMax) / 2
取中间值的平方 iMul = iMid * iMid
若 iMul 等于 num,则可以找着算术平方根,即返回 true
若 iMul > num,即 iMid > sqrt(num),即所求值小于 iMid,需要在 iMin 到 iMid -1 范围中查找,即 iMax = iMid - 1
若 iMul < num,即 iMid < sqrt(num),即所求值大于 iMid,需要在 iMid + 1 到 iMax 范围中查找,即 iMin = iMid + 1
继续执行循环,直到 iMin > iMax,退出循环,此时为找不到算术平方根,故返回false
代码
类似题目
类似题解
本文来自博客园,作者:EricsT,转载请注明原文链接:https://www.cnblogs.com/EricsT/p/18570843