X的平方根

    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;
    }
}
posted @ 2021-05-13 06:02  halfway2  阅读(136)  评论(0编辑  收藏  举报