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

    //先看ans赋值和谁(r=mid-1或者l=mid+1)在一起
    //如果和l=mid+1在一起,说明是寻找当前判断条件的最后一个 
    //如果和r=mid-1在一起,说明是寻找当前判断条件的第一个
    //上面说的当前判断条件,需要看清楚ans赋值是在if还是在else里,如果在else里,要取if的反条件
    
    int bs4 (int target, int nums[], int len) {
        int l=0, r=len-1;
        int ans = -1;
        while(l <= r) {
            int mid = (l+r) >> 1;
            if(nums[mid] < target) {
                ans = mid; // ans赋值和l=mid+1在一起,说明是寻找最后一个。在条件是nums[mid]<target里,所以是寻找<target的最后一个
                l = mid + 1;
            }
            else
                r = mid - 1;
        }
        return ans;
    }
    
    int bs5 (int target, int nums[], int len) {
        int l=0, r=len-1;
        int ans = -1;
        while(l <= r) {
            int mid = (l+r) >> 1;
            if(nums[mid] < target)
                l = mid + 1;
            else {
                ans = mid; // ans赋值和r=mid-1在一起,说明是寻找第一个。在条件是nums[mid]>=target里,所以是寻找>=target的第一个
                r = mid - 1;
            }
        }
        return ans;
    }
    

      

  • 相关阅读:
    IOS
    WAN
    在不同网段使用 VLAN 通信
    数据链路层
    GRE 协议
    路由协议 (1)
    隔离广播域的 VLAN 来了
    数据包的通信过程
    Webpack 原理浅析
    蒲公英 · JELLY技术周刊 Vol.16 谷歌首个线上 Web 开发者大会
  • 原文地址:https://www.cnblogs.com/maji233/p/15173916.html
Copyright © 2011-2022 走看看