zoukankan      html  css  js  c++  java
  • binary search模板总结

    二分查找算法是最常用的一种高效算法,所以本文将常见的情形做一个总结,得到一个二分查找的模板,方便应对各种二分查找中的问题。

    当前有一个有序的数列:

    1, 5, 9   【每个数字都是唯一的】
    1, 2, 2, 9  【存在重复的数字】
    

    模板

    该模板可以在数列中查找一个数target,如果target在数列中存在,输出target第一次出现位置下标,如果不存在,则输出插入到数列中之后的下标。

    int binarySearch(vector<int>& numbers, int target) {
        int len = numbers.size();
        int l = 0, r = len, mid = l+(r-l)/2;
        while (l < r) {
            if (numbers[mid] >= target) {
                r = mid;
            } else {
                l = mid+1;
            }
            mid = l+(r-l)/2;
        }
        return r;
    }
    
    // 样例
    
    数列: 1 5 9
    target : 1            output : 0
    target : 5            output : 1
    target : 9            output : 2
    target : 0            output : 0
    target : 10          output : 3
    target : 4            output : 1  
    
    数列: 1 2 2 9
    target : 1            output : 0
    target : 2            output : 1
    target : 9            output : 3
    target : 0            output : 0
    target : 10          output : 4
    target : 4            output : 3  
    
  • 相关阅读:
    PHP技巧通过COM使用ADODB
    PHP开发环境安装配置全攻略
    散列表
    poj Antiprime Sequences
    HDU 2011 菜鸟杯
    UVA The ? 1 ? 2 ? ... ? n = k problem
    poj 3126 Prime Path
    uva 699 The Falling Leaves
    UVA Steps
    poj 1426 Find The Multiple
  • 原文地址:https://www.cnblogs.com/yinzm/p/8744727.html
Copyright © 2011-2022 走看看