1.题目地址:https://leetcode-cn.com/problems/sqrtx/
2.题目内容:x的平方根 (简单)
实现int sqrt(int x)函数,计算并返回x的平方根,其中x是非负整数,由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去.
示例1:
输入4
输出2
示例2:
输入8
输出2
说明8的平方根是2.8284..
由于返回类型是整数,所以小数部分被舍去
3.思考内容:
a.x=n^2,属于函数单调递增
b.存在上下边界
c.可以通过索引来获取
4.处理方式一:
public int mySqrt(int x) { // 1.进行参数有效性验证 if (x <= 0) { return 0;} // 2.进行二分法参数设置 int left = 0, right = x, ans = 0; // 3.进行二分法核心逻辑 while (left <= right) { int mid = left + (right - left) / 2; // 防止mid数据溢出 long midVal = (long)mid * mid; if (midVal == x) { ans = mid; break; // 结束循环的标志 } else if (midVal < x) { ans = mid; // 非标准的平方根 left = mid + 1; // 结束循环的标志 } else { right = mid - 1; } } return ans; }
5.处理方式二:
class Solution { public int mySqrt(int x) { // 1.进行参数有效性验证 if (x <= 0) { return 0;} // 2.进行二分法参数设置 int left = 0, right = x, ans = 0; // 3.进行二分法核心逻辑 while (left <= right) { int mid = left + (right - left) / 2; long midVal = (long)mid * mid; if (midVal <= x) { // 将方式一中的等于和小于合并处理. ans = mid; left = mid + 1; } else { right = mid - 1; } } return ans; } }