首页 > 其他 > 详细

leetcode笔记:Sqrt(x)

时间:2016-01-01 19:01:46      阅读:110      评论:0      收藏:0      [点我收藏+]

一. 题目描述

Implement int sqrt(int x).
Compute and return the square root of x.

二. 题目分析

该题要求实现求根公式,该题还算是比较简单的,因为只需返回最接近的整数,直接二分法即可。在实现的过程中还是有一些细节的,比如判断条件:x / mid > mid而不能是x > mid * mid,因为mid * mid会导致溢出。

三. 示例代码

#include <iostream>

using namespace std;

class Solution
{
public:
    int sqrt(int x)
    {
        if (x == 0 || x == 1) return x;
        int min = 1, max = x / 2; // 根必在此区间中
        // 二分查找
        int mid, result;
        while (min <= max)
        {
            mid = min + (max - min) / 2;
            if (x / mid > mid)
            {               
                // 根的平方需小于等于x,因此每次须在此处更新根的值
                result = mid; 
                min = mid + 1;
            }
            else if (x / mid < mid) max = mid - 1;
            else return mid;
        }
        return result;
    }
};

一些运行结果:

技术分享

四. 小结

此题为分治思路的经典题型之一。

leetcode笔记:Sqrt(x)

原文:http://blog.csdn.net/liyuefeilong/article/details/50443986

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!