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

来源:互联网 发布:金山软件管家官方 编辑:程序博客网 时间:2024/06/06 23:54

c++ :

//二分查找拓展款 #include<iostream>#include<vector>using namespace std; //获取k第一次出现的下标int getLower(vector<int> data,int k){        int start = 0,end = data.size()-1;        int mid = (start + end)/2;               while(start <= end){            if(data[mid] < k){                start = mid + 1;            }else{                end = mid - 1;            }            mid = (start + end)/2;        }        return start; }//获取k最后一次出现的下标int getUpper(vector<int> data,int k){         int start = 0,end = data.size()-1;        int mid = (start + end)/2;                 while(start <= end){            if(data[mid] <= k){                start = mid + 1;            }else{                end = mid - 1;            }            mid = (start + end)/2;        }                 return end;}int GetNumberOfK(vector<int> data ,int k) {        int lower = getLower(data,k);        int upper = getUpper(data,k);                return upper - lower + 1; } void main(){    int a[15]={1,2,3,4,5,6,7,7,7,7,7,7,7,8,9};    vector<int> b(a,a+15);    cout<<GetNumberOfK(b ,7)<<endl;    while(1);}

java :

//二分查找拓展款 public class Overcount {int findUp(int[] a,int k) {        int start = 0;              int end = a.length-1;        int mid = (start+end)/2;        while(start<=end) {                     if(a[mid] < k)                  start = mid+1;            else                end = mid-1;                mid = (start+end)/2;        }            return start;    }int findDown(int[] a,int k) {    int start = 0;          int end = a.length-1;    int mid = (start+end)/2;    while(start<=end) {                 if(a[mid] <= k)                                         start = mid+1;            else            end = mid-1;            mid = (start+end)/2;    }        return end;}int findK(int[] a,int k) {    int c = findDown(a,k) - findUp(a,k) + 1;    return c;}public static void main(String[] args) {    Overcount aim = new Overcount ();    int[] a = {1,2,3,4,5,6,7,7,7,7,7,7,7,8,9,10};    System.out.println(aim.findK(a,7));    }}
阅读全文
0 0