zoukankan      html  css  js  c++  java
  • 二分查找

    --------开始--------

    二分查找算是分治法中的一种方法,二分查找的时间复杂度是O(log n),要想使用二分查找法需要必须的一个条件,序列必须是一个有序的序列,无论是递增的还是递减的序列都可以。

    算法思路 :假设要查找的目标在有序序列 [ l, r ] 中,我们每次拿要查找的目标值和序列中间的值比较,每次序列缩短一半,当最后 l == r 时就找出来了目标值

    对于有序序列 [ l, r ] ,二分算法模板有两种

    1. 把序列 [ l, r ] ,分成 [ l, mid ] 和 [ mid + 1, r ] ,其后续需要更新的操作是 l = mid + 1 或者 r = mid 。

    2. 把序列 [ l, r ],分成 [ l, mid - 1 ] 和 [ mid, r ] ,其后续需要更新的操作是 l = mid 或者 r = mid -1 。

        //对于第二种模板我们需要在计算 mid 时要加 1,这是因为为了防止出现死循环


    第一种模板

    int bsearch(int l,int r)
    {
    int mid;
    while(l < r)
    {
    mid = (l + r) / 2;
    if(check)
    l = mid + 1;
    else
    r = mid;
    }
    return l;
    }

    第二种模板

    int bsearch(int l,int r)
    {
    int mid;
    while(l < r)
    {
    mid = (l + r + 1) / 2;
    if(check)
    r = mid - 1;
    else
    l = mid;
    }
    return l;
    }

    两种模板具体使用哪种根据具体的情况确定使用那个模板,有时候不同的题目需要修改一下模板,灵活运用。

    PS:

         参考文章:https://www.acwing.com/blog/content/31/

    --------结束--------

  • 相关阅读:
    Redis
    多线程相关
    selenium操作浏览器的基本方法
    selenium之 webdriver与三大浏览器版本映射表(更新至v2.29)
    selenium安装及官方文档
    Python(3)_python对Json进行操作
    python类中的self参数和cls参数
    python3中shuffle函数
    Python3中assert断言
    python2和python3中range的区别
  • 原文地址:https://www.cnblogs.com/chuyds/p/10557973.html
Copyright © 2011-2022 走看看