zoukankan      html  css  js  c++  java
  • 剑指offer 数字在排序数组中出现的次数

    题目的意思很简单,统计一个有序数组中某个数出现的次数。这里联系一下两种二分写法。

    第一种二分为返回数组中与key相同的第一个数。(例如 [1,2,2,2,3] key =2 返回的为1)。相对于传统的二分,要修改的地方在我们要保证a[mid] == key的时候,尝试想左边区间继续寻找,并让r=mid。代码如下:

    int binSearchFirst(vector<int> a,int k)
    {
        int l = 0;
        int r = a.size()-1;
    
        while(r-l > 1)
        {
           int mid = (l+r)>>1;
           if(a[mid] >= k) r = mid; //相等的时候,继续去左子区间找是否有合适的解
           else l = mid+1;
           //cout << "123" <<endl;
        }
        if(a[r] !=k && a[l] !=k) return -1;
        if(a[l] == k) return l; 
        return r;
    
    }

    第二种二分为找出key最后出现的位置。(例如[1,2,2,3,4] key =2 输出为2)。这里我们只需要保证a[mid] == key的时候,继续去右子区间看还有没有key代码如下:

    int binSearchLast(vector<int>a ,int k)
    {
        int l = 0;
        int r = a.size()-1;
    
        while(r-l >1)
        {
           int mid = (l+r)>> 1;
           if(a[mid] <=k ) l=mid;
           else r =mid-1;
        }
        if(a[l] != k && a[l]!= k) return -1;
        if(a[r] == k) return r;
        return l;
    }
  • 相关阅读:
    MySQL >>> 存储引擎
    MySQL >>> 基本操作语句
    MySQL >>> 使用安装
    协程 *单线程实现并发
    进程池 & 线程池
    线程 *知识点扩充
    进程 & 线程
    DRF单表序列化
    DRF
    接口规范
  • 原文地址:https://www.cnblogs.com/z1141000271/p/11827479.html
Copyright © 2011-2022 走看看