69. Sqrt(x)leetcode

69. Sqrt(x)

问题描述:Given a non-negative integer x, compute and return the square root of x.

Since the return type is an integer, the decimal digits are truncated, and only the integer part of the result is returned.

Example 1:
Input: x = 4
Output: 2
Example 2:
Input: x = 8
Output: 2
Explanation: The square root of 8 is 2.82842…, and since the decimal part is truncated, 2 is returned.

两种方法解题:
1.二分搜索法
2.牛顿迭代法

1.二分搜索法

注意这种方法有四个地方:
第一处是 right 的初始化。

第二处是 left 和 right 的关系,可以写成 left < right 或者 left <= right。

第三处是更新 right 的赋值,可以写成 right = mid 或者 right = mid - 1。

第四处是最后返回值,可以返回 left,right,或 right - 1。

但是这些不同的写法并不能随机的组合,像博主的那种写法,若 right 初始化为了 nums.size(),num为数组,那么就必须用 left < right,而最后的 right 的赋值必须用 right = mid。但是如果我们 right 初始化为 nums.size() - 1,那么就必须用 left <= right,并且right的赋值要写成 right = mid - 1,不然就会出错。所以博主的建议是选择一套自己喜欢的写法,并且记住,实在不行就带简单的例子来一步一步执行,确定正确的写法也行。

int mySqrt1(int x){
        if(x <= 1) return x;
        int left = 0;
        int right = x;
        while(left <= right)
        {
            int mid = left + (right - left)/2;
            if(mid == x/mid)return mid;
            if(mid < x/mid){
                left = mid+1;
            }else{
                right = mid-1;
            }
        }
        return right;

    }

2.牛顿迭代法

就记住公式,直接代入就行,不理解牛顿迭代法的,可以看这个:
https://blog.csdn.net/yymm120/article/details/105472489?ops_request_misc=%25257B%252522request%25255Fid%252522%25253A%252522160756825019725271096789%252522%25252C%252522scm%252522%25253A%25252220140713.130102334…%252522%25257D&request_id=160756825019725271096789&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_click~default-2-105472489.nonecase&utm_term=%E7%89%9B%E9%A1%BF%E8%BF%AD%E4%BB%A3%E6%B3%95

int mySqrt(int x){
        if(x<=1) return x;
        int re = x;
        while(re*re > x)
        {
            re = (x/re + re)/2;
        }
        return re;

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值