69. Sqrt(x)leetcode

本文介绍了解决给定非负整数x的平方根问题的两种方法:二分搜索法和牛顿迭代法。二分搜索法通过不断缩小搜索范围直至找到满足条件的整数部分;牛顿迭代法利用迭代公式逐步逼近平方根的精确值,最终取整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.youkuaiyun.com/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;

    }
根据引用中的解释,一个数的平方根最多不会超过它的一半。所以对于69这个数,它的平方根最多不会超过34.5。为了计算出精确的平方根值,我们可以使用引用中提到的求解方程f(x) = x^2 - a的正根的方法。根据引用,我们可以实现一个函数sqrt(x),来计算并返回x的平方根,其中x是非负整数并且返回类型是整数。根据引用中的方法,我们可以使用二分法来逐步逼近平方根的值。具体步骤如下: 1. 设定左边界low为0,右边界high为x。 2. 当low小于等于high时,执行以下步骤: a. 计算中间值mid,即mid = (low + high) / 2。 b. 如果mid的平方等于x,返回mid作为x的平方根。 c. 如果mid的平方大于x,将high更新为mid - 1。 d. 如果mid的平方小于x,将low更新为mid + 1。 3. 返回low - 1作为x的平方根。 根据以上步骤,我们可以得到69的平方根为8。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【LeetCode69. x 的平方根](https://blog.csdn.net/weixin_41888257/article/details/108357200)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [【Leetcode刷题笔记】69. x的平方根](https://blog.csdn.net/xqh_Jolene/article/details/124820855)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [leetcode : 69. x 的平方根](https://download.csdn.net/download/angelloveyou/10675944)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值