• 剑指offer-面试题53_1-在排序数组中查找数字-二分查找


    /*
    题目:
    	统计一个数字在排序数组中出现的次数。
    */
    /*
    思路:
    	1、从前往后遍历,时间复杂度O(n)。
    	2、二分查找到目标数字target,向前向后遍历,时间复杂度O(n)。
    	3、利用二分法,递归找到数字出现的第一个位置和最后一个位置,时间复杂度O(logn)。
    */
    #include<iostream>
    #include<cstring>
    #include<vector>
    #include<algorithm>
    #include<map>
    
    
    using namespace std;
    
    int getFirstOfK(vector<int> &A,int start,int end, int target){
        if(start > end) return -1;
    
        int mid = (start + end) / 2;
        if(A[mid] > target){
            return getFirstOfK(A,start,mid-1,target);
        }else if(A[mid] < target){
            return getFirstOfK(A,mid+1,end,target);
        }else{
            if(mid == 0 || A[mid-1] != target){
                return mid;
            }else{
                return getFirstOfK(A,start,mid-1,target);
            }
        }
    }
    
    int getLastOfK(vector<int> &A,int start,int end,int target){
        if(start > end) return -1;
    
        int mid = (start+end) / 2;
        if(A[mid] > target){
            return getLastOfK(A,start,mid-1,target);
        }else if(A[mid] < target){
            return getLastOfK(A,mid+1,end,target);
        }else{
            if(mid == end || A[mid+1] != target){
                return mid;
            }else{
                return getLastOfK(A,mid+1,end,target);
            }
        }
    }
    
    int getNumbersOfK(vector<int> &A, int target){
        int first = getFirstOfK(A,0,A.size()-1,target);
        int last = getLastOfK(A,0,A.size()-1,target);
    
        if(last != -1 && first != -1){
            return last - first + 1;
        }
        return 0;
    
    }
    
    int main(){
       vector<int> a = {1,1,3,4,4,4,5};
       cout<<getNumbersOfK(a,1);
    }
    

       

  • 相关阅读:
    sed cat 命令
    Datetime 时间模块求日期差
    Selenium:截图显示等待
    SAS常用函数
    SAS笔记
    python 简明教程 【转】
    numpy 笔记
    android Adapter使用详解
    Eclipse的使用技巧之eclipse里的查找:
    Hierarchy Viewer之官方文档翻译之中英对照之未完不续版之使用详解.
  • 原文地址:https://www.cnblogs.com/buaaZhhx/p/12088286.html
Copyright © 2020-2023  润新知