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

    给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如果target不存在于数组中,返回-1

    样例

    在数组 [1, 2, 3, 3, 4, 5, 10] 中二分查找3,返回2

    给一个real耿直的解法

     1 int binarySearch(vector<int> &array, int target) {
     2         // write your code here
     3         int left=0,right=array.size()-1;
     4         int mid;
     5         while(left<=right){
     6             mid=left+(right-left)/2;
     7             if(target>array[mid]){
     8                 left=mid+1;
     9             }
    10             else if(target<array[mid]){
    11                 right=mid-1;
    12             }
    13             else{
    14                 if(target==array[left]){
    15                      return left;
    16                 }
    17                 else if(target==array[right]){
    18                     return right;
    19                 }
    20                 else{
    21                     while(array[mid-1]==array[mid]){
    22                         mid--;
    23                     }
    24                     return mid;
    25                 }
    26                 
    27             }
    28         }
    29         
    30         return -1;
    31     }

    第一个else里面是处理几乎快找到解的时候(二分不下去了)会发生的各种情况

    1、mid无法取到0或者最后

    2、mid是对应target但是不是第一个出现的target

  • 相关阅读:
    怎么重新启动网卡
    @JsonProperty的使用
    JAVA中的反射机制
    spring的IOC入门案例
    spring的IOC底层原理
    maven+Spring环境搭建
    SpringMVC与Struts2区别与比较总结
    Struts2面试题
    oracle自增序列创建
    Hibernate分页查询报错
  • 原文地址:https://www.cnblogs.com/TheLaughingMan/p/8202351.html
Copyright © 2011-2022 走看看