zoukankan      html  css  js  c++  java
  • leetcode-69.x的平方根

    leetcode-69.x的平方根

    Points

    二分查找

    牛顿迭代

    题意

    实现 int sqrt(int x) 函数。

    计算并返回 x 的平方根,其中 x 是非负整数。

    由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

    示例 1:

    输入: 4
    输出: 2
    

    示例 2:

    输入: 8
    输出: 2
    说明: 8 的平方根是 2.82842..., 
         由于返回类型是整数,小数部分将被舍去。

    示例 3:

    输入: 2147395600
    输出: 46340
    

    算法-1---牛顿迭代

     用时:16ms

     复杂度:应该是小于二分的。代值验证了一下,但不完全。

     递推公式:

    Xn+1  = X- (F(x) / F'(x)), 这相当于是求解  r2 = x, 即 F(r) = r2 - x

    化简得:Xn+1  = 1/2 (Xn - x/X(n)) 

     不明白的话,请留言或者自行参考文首连接。

    code

     1 class Solution {
     2 public:
     3     int mySqrt(int x) {
     4         long ans = x;;
     5         while(true)
     6         {
     7             if(ans*ans <= x && (ans+1)*(ans+1) > x)
     8                 break;
     9             else
    10             {
    11                 ans = long(0.5*(ans + x/ans));
    12             }
    13         }
    14         return ans;
    15     }
    16 };

    算法-2---二分查找

     用时:16ms

     复杂度:O(log2n)

    二分查找,是固定套路,套就完了,但是要注意的是,搞清楚取 右值 的原因。

    code

     1 class Solution {
     2 public:
     3     int mySqrt(int x) {
     4         long left = 0, right = x, mid;
     5         while(left <= right)
     6         {
     7             mid = (left + right)/2;
     8             if(mid * mid > x)
     9                 right = mid -1;
    10             else if(mid * mid < x)
    11                 left = mid + 1;
    12             else
    13                 return mid;
    14         }
    15         return right;
    16     }
    17 };
  • 相关阅读:
    [HNOI2013]切糕
    [POI2015]Kinoman
    「NOI2014」动物园
    [ZJOI2006]书架
    [HEOI2015]定价
    bzoj1833 数字计数
    bzoj2565 最长双回文子串
    bzoj4198 荷马史诗
    bzoj1193 马步距离
    bzoj3329 Xorequ
  • 原文地址:https://www.cnblogs.com/yocichen/p/10301443.html
Copyright © 2011-2022 走看看