zoukankan      html  css  js  c++  java
  • 69. Sqrt(x)

    Implement int sqrt(int x).

    Compute and return the square root of x.

    二分可解

    这里是关于二分的一些总结:

    首先,如果题目属于"二分值越大越符合条件",即要求符合条件的最小值,那就是
    while(r>l){mid=(l+r)/2。。。} return l;
    然后更新是不符合条件l=mid+1,否则是r=mid
    反之,即 题目属于"二分值越小越符合条件",即要求符合条件的最大值,那就是
    while(r>l){mid=(l+r+1)/2。。。} return r;
    然后更新是符合条件l=mid,否则是r=mid-1
    至于为啥?→_→其实只要试试r-l=1的例子
    upd:又想起一坑{其实是看到有人写了},如果涉及负数,最好用mid=l+(r-l)/2代替第1类,mid=l+(r-l+1)/2代替第2类
    链接:https://www.zhihu.com/question/36132386/answer/66071801
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
     
    class Solution {
    public:
        int mySqrt(int x) {
            long long l = 0, r = x,mid;
            if (x < 2) return x;
            while (l < r) {
                mid = l + (r - l + 1) / 2;
                if (mid > x/mid) r = mid - 1;
                else if (mid < x/mid) l = mid;
                else return mid;
            }
            return r;
        }
    };
  • 相关阅读:
    随机获取Mysql数据表的一条或多条记录
    swap 释放
    linux sed
    mongodb url
    mysql doc
    mysql 8.0 主从复制的优化
    innobackupex 远程备份
    MySQL 8.0新特性:彻底解决困扰运维的复制延迟问题
    pycharm 激活码及使用方式
    MySQL运行内存不足时应采取的措施?
  • 原文地址:https://www.cnblogs.com/pk28/p/7211961.html
Copyright © 2011-2022 走看看