zoukankan      html  css  js  c++  java
  • 二分查找 (最经典代码,及其边界条件的实践分析)

    (注: 原创博客,转载请引用 http://www.cnblogs.com/wubdut/p/5578147.html)

    代码举例: Array递增,找第一个不小于target的下标。

      int theIndex(vector<int> Array) {

        int lo = 0, hi = Array.size()-1;

        while (lo <= hi) {

          int mid = (lo+hi)/2;

          if (target > A[mid]) lo = mid+1;             // (1)

          else hi = mid-1;                                    // (2)

        }

        return lo;                                                     // (3)

      }

    解析: 本段代码引自LeetCode。这是一段非递归的二分查找的代码,其核心代码只有4行, 看起来十分简单,又好理解,但要想在实践中灵活运用并不容易。问题当让出在边界条件,总结为两条:

        a. (1)和(2)哪个包含“=”;

        b. 返回lo还是hi。

    问题a: 只有通过边界检测来完成,将mid-1,mid,mid+1,target设相同值x,结合实际条件判断等号位置;

    问题b: so easy 啦!!!等号不是谁的,就返回谁。以后妈妈再也不用担心我死记硬背二分了(^_^)

  • 相关阅读:
    Typescript和React结合项目初始化
    React 和 TypeScript 如何一起使用
    Cesium取代leaflet,和Vue等前端框架结合
    cesium之3dtiles的制作问题
    Cesium-3dTiles格式详解
    TIN和等高线的关系
    CAD如何生成等高线
    Cesium风场
    cesium加载等高线
    DEM坡度和坡向分析
  • 原文地址:https://www.cnblogs.com/wubdut/p/5578147.html
Copyright © 2011-2022 走看看