《剑指offer》-数字在排序数组中出现的次数

简介: 统计一个数字在排序数组中出现的次数。首先吐槽下出题人的用词,啥叫排序数组?“排序”是个动词好么,“有序”作为一个形容词表示状态,修饰“数组”,才是合适的。题目考察二分查找,首先找到指定数字最先出现的位置,然后找到最后出现的位置,他们的距离+1就是个数。

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

首先吐槽下出题人的用词,啥叫排序数组?“排序”是个动词好么,“有序”作为一个形容词表示状态,修饰“数组”,才是合适的。

题目考察二分查找,首先找到指定数字最先出现的位置,然后找到最后出现的位置,他们的距离+1就是个数。

class Solution14{
public:
    int GetNumberOfK(vector<int> data, int k){
        if (data.empty()){
            return 0;
        }
        int first = GetFirstIndex(data, k, 0, data.size() - 1);
        int last = GetLastIndex(data, k, 0, data.size() - 1);
        if (first > -1 && last > -1){
            return last - first + 1;
        }
        return 0;
    }
    int GetFirstIndex(vector<int>& data, int k, int start, int end){
        if (start > end) return -1;
        int mid = start + (end - start) / 2;
        if (data[mid] == k){
            if (mid == start || data[mid-1]!=k){
                return mid;
            }
            else{
                end = mid - 1;
            }
        }
        else{
            if (data[mid]>k){
                end = mid - 1;
            }
            else{
                start = mid + 1;
            }
        }
        return GetFirstIndex(data, k, start, end);
    }
    int GetLastIndex(vector<int>& data, int k, int start, int end){
        if (start > end) return -1;
        int mid = start + (end - start) / 2;
        if (data[mid] == k){
            if (mid == end || data[mid + 1] != k){
                return mid;
            }
            else{
                start = mid + 1;
            }
        }
        else{
            if (data[mid]>k){
                end = mid - 1;
            }
            else{
                start = mid + 1;
            }
        }
        return GetLastIndex(data, k, start, end);
    }
};
目录
相关文章
【剑指offer】-数字在排序数组中出现的次数-32/67
【剑指offer】-数字在排序数组中出现的次数-32/67
【剑指offer】- 数组中重复的数字 -48/67
【剑指offer】- 数组中重复的数字 -48/67
|
4月前
|
算法 Java
每日一题《剑指offer》数组篇之统计数字在排序数组中出现的次数
每日一题《剑指offer》数组篇之统计数字在排序数组中出现的次数
32 0
每日一题《剑指offer》数组篇之统计数字在排序数组中出现的次数
|
5月前
剑指offer JZ37数字在排序数组中出现的次数
剑指offer JZ37数字在排序数组中出现的次数
25 0
|
7月前
剑指offer-1.找出数组中重复的数字
剑指offer-1.找出数组中重复的数字
14 0
|
10月前
|
C++
剑指offer 55. 数字在排序数组中出现的次数
剑指offer 55. 数字在排序数组中出现的次数
58 0
|
10月前
剑指offer_数组---数字在排序数组中出现的次数
剑指offer_数组---数字在排序数组中出现的次数
31 0
|
10月前
|
C++
剑指offer 01. 找出数组中重复的数字
剑指offer 01. 找出数组中重复的数字
35 0
|
算法 C语言
剑指Offer 第53题:数字在升序数组中出现的次数
剑指Offer 第53题:数字在升序数组中出现的次数
101 0
剑指Offer 第53题:数字在升序数组中出现的次数
|
算法 Java
在排序数组中查找数字I(剑指offer 53-I)
在排序数组中查找数字I(剑指offer 53-I)