2018-05-08 69. Sqrt(x)

题意:给你一个数x,返回它的平方根,如果平方根是小数,向下取整。
解题思路:使用二分查找x的平方根ans,条件是不满足ans * ans > x,且满足(ans + 1) * (ans + 1) > x,此时ans为答案。
解题过程中要有两个防溢出操作:
1、条件判断时使用mid > x / mid;
2、求中间mid值使用mid = low + (high - low) / 2;

class Solution {
public:
    int mySqrt(int x) {
        if(x == 0) return x;
        int low = 1, high = x;
        while(true)
        {
            int mid = low + (high - low) / 2;
            if(mid > x / mid)
            {
                high = mid - 1;
            }else
            {
                if((mid + 1) > x / (mid + 1))
                    return mid;
                low = mid + 1;
            }
        }
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,771评论 0 33
  • 基于学生学习共同体培育语文生态课堂文化的研究 近年来,随着现代教育理念的不断深入与...
    火车头123阅读 2,050评论 0 8
  • 转载自http://wanwu.tech/2017/03/15/functions-and-closures/ 简...
    quitus阅读 518评论 0 0
  • 分治策略 本文包括分治的基本概念二分查找快速排序归并排序找出伪币棋盘覆盖最大子数组 源码链接:https://gi...
    廖少少阅读 1,893评论 0 7
  • 动态规划 111. 爬楼梯思路类似斐波那契数列注意考虑第 0 阶的特殊情况 272. 爬楼梯 II思路类似上题,只...
    6默默Welsh阅读 2,456评论 0 1