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

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

1.题目描述

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

2.思路

二分法:
1.找到target的下标
2.找到target+1的下标
两个下标相减

3.代码

class Solution {
public:
    int search(vector<int>& nums, int target) {
        int index1 = find_first(nums,target);
        int index2 = find_first(nums,target+1) - 1;
        if(index1 > -1 && index2 > -1){
            return index2 - index1 + 1;
        }
        return 0;
    }
    int find_first(vector<int>& nums,int target){
        int left = 0;
        int right = nums.size();
        while(left < right){
            int mid = left + (right - left) / 2;
            if(nums[mid] >= target){
               right = mid;
            }
            else{
                left = mid + 1;
            }
        }
        return left;
    }
};

4.复杂度分析

时间复杂度: log ⁡ ( n ) \log(n) log(n)
  由于二分查找每次将搜索区间大约划分为两等分,所以至多有 log ⁡ 2 n \log_{2}{n} log2n次迭代。二分查找的过程被调用了两次,所以总的时间复杂度是对数级别的。
空间复杂度:O(1)
  所有工作都是原地进行的,所以总的内存空间是常数级别的。

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页