一. 题目描写叙述

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)

四. 小结

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

相关文章:

  • 2022-12-23
  • 2021-07-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-23
  • 2021-10-07
  • 2021-07-31
猜你喜欢
  • 2022-01-25
  • 2021-05-16
  • 2021-08-18
  • 2021-10-05
  • 2022-02-10
相关资源
相似解决方案