zoukankan      html  css  js  c++  java
  • 【leetcode】Sqrt(x)

    题目描述:

    Implement int sqrt(int x).

    Compute and return the square root of x.

    实现开根号,并且返回整数值(这个很重要,不是整数的话就有一种方法用不了了)

    方法一:二分法,另外由于我们知道开根号的结果肯定小于等于这个数的二分之一,所以还可以做个线性优化,代码如下:

     1 class Solution {
     2 public:
     3     int sqrt(int x) {
     4         long long left=0;
     5         long long right=x/2+1;
     6         long long m=(left+right)/2;//注意这里有坑
     7         while(left<=right){
     8             m=(left+right)/2;
     9             if(m*m>x){
    10                 right=m-1;
    11             }
    12             else if(m*m==x){
    13                 return m;
    14             }
    15             else{
    16                 left=m+1;
    17             }
    18         }
    19         return right;
    20     }
    21 };

    方法二、牛顿迭代法,具体细节百度之,摘录如下:

    设r是的根,选取作为r的初始近似值,过点曲线的切线L,L的方程为求出L与x轴交点的横坐标

    ,称x1为r的一次近似值。过点做曲线的切线,并求该切线与x轴交点的横坐标,称为r的二次近似值。重复以上过程,得r的近似值序列,其中,称为r的次近似值,上式称为牛顿迭代公式

    应用到我们的题目里可以得到xi+1= (xi + n/xi) / 2。

    于是,代码如下:

     1 class Solution {
     2 public:
     3     int sqrt(int x) {
     4     if (x == 0) return 0;
     5     double last = 0;
     6     double res = 1;
     7     while (res != last)
     8     {
     9         last = res;
    10         res = (res + x / res) / 2;
    11     }
    12     return int(res);
    13 }
    14 };
  • 相关阅读:
    test
    dd 命令 sd卡系统迁移
    关于庖丁分词
    Linux source命令
    Linux系统查看系统是32位还是64位方法总结 in 创新实训
    总结这两天连续干掉的bug In 创新实训 智能自然语言交流系
    穷举法应用——搬砖块
    判断素数类问题汇总
    统计计算学生成绩类问题汇总
    C语言简明数据类型指南
  • 原文地址:https://www.cnblogs.com/MrLJC/p/3679577.html
Copyright © 2011-2022 走看看