• leetcode69


    简单

    这道题的核心就是二分法

    二分法查找的思路如下:

    (1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。

    (2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。

    (3)如果某一步数组为空,则表示找不到目标元素。

    二分法查找的时间复杂度O(logn)。
    ————————————————
    进入到这个题中可以有一个这样的转化.

    所求是完成求平方根的动作.比较笨的方法是挨个遍历.

    但是明显要耗费很多的时间.

    一个数的平方根一定小于他的二分之一

    还有一点

    x的平方的函数(y=x2)是个单调递增函数

    所以采用二分查找可以节省大量的时间.

    class Solution {
        public int mySqrt(int x) {
            if(x<2)return x;
            long num;
            //二分法就是移动边界
           int left=2;//左边界
           int right=x/2;//右边界
           int pricot;//平方根
           while(right>=left){//左右节点不装在一起
               pricot=left+(right-left)/2;
               num=(long)pricot*pricot;//如果数字过大pricot会溢出
               if (num>x) right=pricot-1;//
               else if(num<x) left=pricot+1;
               else return pricot;
           }
    
           return right;
        }
    //测试用例
        public static void main(String[] args) {
    
            Solution solution = new Solution();
            System.out.println( solution.mySqrt(2147395599));
        }
    }
    
  • 相关阅读:
    sql语句技巧
    逻辑查询处理的步骤
    left join 和 left outer join的区别
    SQL 笛卡尔积
    SQL 分类
    显示数据库中的表
    数据库备份 恢复
    增删主键及修改表名
    Securing Data笔记
    System Monitoring之"文件系统"
  • 原文地址:https://www.cnblogs.com/yanzezhong/p/12561762.html
Copyright © 2020-2023  润新知