数字在排序数组中出现的次数

发布时间:2019年09月02日 阅读:264 次

[编程题]数字在排序数组中出现的次数

样例 8

 1 2 3 3 3 3 4 5   3 

链接:https://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2?orderByHotValue=1&page=8&onlyReference=false
来源:牛客网

class Solution {
public:
    int erfen(vector<int>data,double k){
        int l = 0;
        int r = data.size()-1;
        while(l<=r){
            int mid = (l+r)/2;
            if(data[mid]<k)l = mid+1;
            else r = mid-1;
        }
        return l;
    }
    int GetNumberOfK(vector<int> data ,int k) {

        int p1 = erfen(data,k+0.5);
        int p2 = erfen(data,k-0.5);
//        cout<<p1-p2<<endl;
        return p1-p2;
    }
};
#include<bits/stdc++.h>
using namespace std;
vector<int>vc;
class Solution {
public:
    int erfen_first(vector<int> data ,int l,int r,double k){


        if(l>=r){

              if(data[l]==k)return l;
              else    return -1;
        }
        int mid = (l+r)/2;
        if(data[mid]<k)return erfen_first(data,mid+1,r,k);
        else return erfen_first(data,l,mid,k);

    }
    // 1 2 3 3 4  5

    int erfen_last(vector<int> data ,int l,int r,double k){

        if(l>=r){
              if(data[l]==k)return l;
              if(data[l-1]==k)return l-1;
              else   return -1;
        }
        int mid = (l+r)/2;
        if(data[mid]<=k)return erfen_last(data,mid+1,r,k);
        else return erfen_last(data,l,mid,k);

    }
    //1 2 3 3 3 4 5
    int GetNumberOfK(vector<int> data ,int k) {

        auto pp = equal_range(data.begin(),data.end(),k);
        return pp.second-pp.first;
        int len = data.size();
        if(len==0)return 0;
         int pos = erfen_first(data,0,len-1,k);
         if(pos!=-1)
         {
            int pos2 = erfen_last(data,0,len-1,k);
//         cout<<pos<<" "<<pos2<<endl;
            return pos2-pos+1;
         }
         else return 0;

    }
};
int main(){

    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        int num;
        cin>>num;
        vc.push_back(num);
    }
    int k;
    cin>>k;
    Solution ss;
    int an = ss.GetNumberOfK(vc,k);
    cout<<an<<endl;
    return 0;
}


Tag:
相关文章

发表评论: