[剑指offer]数字在排序数组中出现的次数

来源:互联网 发布:联通软件研究院怎么样 编辑:程序博客网 时间:2024/04/30 05:17

题目描述

统计一个数字在排序数组中出现的次数。

分析:排序数组找数字,当然想到用二分,用两次二分,分别找到第一个k和最后一个k,计算两者位置的差值返回。要注意数组中不包含这个数字的情况。

代码:

class Solution {public:    int GetFirstk(vector<int> data,int k,int low,int high){        while(low<high){            int mid=low+(high-low)/2;            if(data[mid]==k){                if(data[mid-1]!=k){                    return mid;                }                high=mid-1;            }            else if(data[mid]>k){                high=mid-1;            }else{                low=mid+1;            }                    }        if(low>=high&&data[low]==k) return low;        return -1;    }    int GetLastk(vector<int> data,int k,int low,int high){        while(low<high){            int mid=low+(high-low)/2;            if(data[mid]==k){                if(data[mid+1]!=k){                    return mid;                }                low=mid+1;            }            else if(data[mid]>k){                high=mid-1;            }            else{                low=mid+1;            }        }        if(low>=high&&data[low]==k) return low;        return -1;    }    int GetNumberOfK(vector<int> data ,int k) {        int n=data.size();        if(n==0||k<data[0]||k>data[n-1]) return 0;        int first=GetFirstk(data,k,0,n-1);        int last=GetLastk(data,k,0,n-1);        if(last!=-1&&first!=-1) return last-first+1;        else return 0;    }};


0 0
原创粉丝点击