首页 > 其他分享 >LeetCode LCR072[x的平方根]

LeetCode LCR072[x的平方根]

时间:2024-12-06 12:15:44浏览次数:8  
标签:iMid 平方 sqrt 平方根 x1 LCR072 LeetCode

题目

链接

LeetCode LCR072[x的平方根]

详情

实例

提示

题解

思路一[暴力法]

由于所求的是整型且是正符号整型,可以采取循环遍历的方式来求取平方根

用 for 循环将 i 由 0 开始遍历

循环体:求 i 的平方值

当平方值小于指定值,此时循环继续

退出循环的条件:

  1. 当平方值为指定值时,返回 i 
  2. 当平方值大于指定值时,返回 i - 1

当 i 为有符号整型时,其遍历到 46341 时,平方值为 2147488281 ,但是力扣官方的 int 值的范围最大值为 2147483647,故其会溢出,所以 i 应该设置为 unsigned int 型

代码一

思路二[二分查找]

问题转换一下,给定一个数,在范围内找到该数,其实就是查找问题,此处可采用二分查找

 

初始值设定最小值 iMin 为 0,最大值 iMax 为给定值 x

开始循环:

求取中间值 iMid = (iMin + iMax) / 2

取中间值的平方 x1= iMid * iMid

若 x1 等于 x,则平方根为 iMid ,退出循环

若 x1 > x,即 iMid > sqrt(x),即所求值小于 iMid,需要在 iMin 到 iMid -1 范围中查找,即 iMax = iMid - 1

若 x1< x,即 iMid < sqrt(x),即所求值大于 iMid,需要在 iMid + 1 到 iMax 范围中查找,即 iMin = iMid + 1

在此处需要注意,由于该题平方根是取整的,所以有可能是找不着整数平方根的,需要在判断的时候另外加一个条件:

如果中间值的平方 x,即 x > x1,则取中间值加1的值的平方根 x2,即判断一下 x2 是否大于 x:如果大于,则平方根取整为 iMid,否则啊,继续循环

也就是啊,x1 < x < x2,也就是 sqrt(x1) < sqrt(x) < sqrt(x2),即 iMid < sqrt(x) < iMid + 1,所以啊,取整之后的值就是 iMid,此时相当于是找到了平方根了,就退出循环了

继续执行循环,直到 iMin > iMax,退出循环

代码二

类似题目

LeetCode 367[有效的完全平方数] 题目

LeetCode 69[x的平方根] 题目

类似题解

LeetCode 367[有效的完全平方数] 题解

LeetCode 69[x的平方根] 题解

标签:iMid,平方,sqrt,平方根,x1,LCR072,LeetCode
From: https://www.cnblogs.com/EricsT/p/18590459

相关文章

  • leetcode 2056. 棋盘上有效移动组合的数目
    classSolution{private:  vector<vector<int>>RMove={{1,0},{-1,0},{0,1},{0,-1}};  vector<vector<int>>BMove={{1,1},{-1,-1},{-1,1},{1,-1}};public:  boolCheckMove(intsx,intsy,intx,inty,intstep,vector<vector......
  • leetcode2836 在传球游戏中最大化函数值
    n名玩家在玩传球游戏,编号为i的玩家固定会把球传给编号为r[i]的玩家,任选一名玩家开始传球,恰好传k次,得分为这k次传球内所有接触过球的玩家的编号之和,如果玩家多次触球,则累加多次。问从哪个玩家开始传,能获得最大总得分,求最大得分。1<=n<=1E5;0<=r[i]<n;1<=k<=1E10分析:与倍增法求l......
  • LeetCode102 二叉树的层序遍历
    LeetCode102二叉树的层序遍历题目链接:LeetCode102描述给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例输入:root=[3,9,20,null,null,15,7]输出:[[3],[9,20],[15,7]]思路方法一:迭代方式--借助队列方法二:递归方式代码方法......
  • LeetCode46:全排列
    原题地址:46.全排列-力扣(LeetCode)题目描述给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。示例1:输入:nums=[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例2:输入:nums=[0,1]输出:[[0,1],......
  • 力扣 LeetCode 51. N皇后(Day14:回溯算法)
    解题思路:每次进入backtracking都表示进入下一行每个backtracking中处理当前行的各个列,看各列是否合法isValid中因为是一行一行向下遍历的,所以对应的当前行一定满足条件,没有放置过其他皇后,只需要看对应的列是否满足即可是否符合需要看左上45°和右上45°,之所以是往上看,......
  • LeetCode LCR126[斐波那契数]
    题目链接LeetCodeLCR126[斐波那契数]详情实例提示题解思路首先想到用递归来求解,F(n)=F(n-1)+F(n-2)但是吧,一看提示啊,0<=n<=100,递归执行100次,那肯定是会超时的噻所以单纯递归肯定是不可行的,此处我采用循环代替递归当n=0时,返回0当n=1时,返回1......
  • leetcode2968 执行操作使频率分数最大
    给定长度为n的数组nums和整数k,可以对数组执行至多k次操作,每次选择1个nums[i],将其增加或减少1,最终数组的频率分数定义为数组众数的频率,求可以得到的最大频率分数。1<=n<=1E5;1<=nums[i]<=1E9;0<=k<=1E14分析:(1)中位数贪心:对于有序数组,如果所有元素都变成相同的数,最优做法是全部......
  • LeetCode【代码随想录】刷题(单调栈篇)
    739.每日温度力扣题目链接题目:给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。思路:维护一个存储下标的单调栈,从栈底到栈顶的下标对应的温度列......
  • LeetCode 509[斐波那契数]
    题目链接LeetCode509[斐波那契数]详情实例提示题解思路递归求值,但是吧,如果是用递归的话有可能会造成内存超出限制的错误,当然我不能确定会不会报此错误,因为我没有试过此处我是用循环代替递归的n为0时,fn为0n为1时,fn为1n为2时,fn为fn_1+fn_2=0+1=1n为3时,fn为......
  • 手动开平方根(附代码)
    一、前面介绍最近时间无聊(摸鱼),萌生想法-》手动开平方根。于是查阅了相关的资料,了解了一些开平方的方法,并通过代码进行了实现。比如:1开平方结果是:12开平台结果是:1.41421356......3开平方结果是:1.73205080......4开平方结果是:25开平方结果是:2.23606797......二、实现方......