《牛客网剑指offer37题》统计一个数字在排序数组中出现的次数

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

结果:牛客网编程通过

思路及程序:


//中心思想,用二分法找到第一个等于K的数组元素,然后向两边移动,直到找到不等于k的元素
    int GetNumberOfK(vector data ,int k) {
        int len = data.size();
        if(len == 0) return 0; //数组长度是0,返回0
        if(len == 1) return (data[0]==k)?1:0;  //数组长度是1,如果这个元素等于k返回1,否则返回0
        int i=0,j=len-1; //二分法是从0到len-1
        int result = 0;
        while(i             int n = (i+j)/2; 
            if(data[n] == k){
                int temp = n;
                while(temp>=0){  //找到了先向左移动找等于k的元素个数
                    if(data[temp] == k)
                        result++;
                    else
                        break;
                    --temp;
                }
                temp = n;
                while(temp                     if(data[temp] == k)
                        result++;
                    else
                        break;
                    ++temp;
                }
                return --result;  //第一次找到的重复了,要减去1
            }
            else if(data[n] > k){
                j = n-1;  //如果k是比中间元素小,将后面的指针j指向中间前一个
            }
            else{
                i = n+1;  //如果k比中间元素大,将后面指针指向中间元素后一个
            }
        }
        return result;
    }

你可能感兴趣的:(《牛客网剑指offer37题》统计一个数字在排序数组中出现的次数)