Skip to content

[剑指 Offer] 53 - I. 在排序数组中查找数字 I #18

Open
@frdmu

Description

@frdmu

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

 

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

限制:

  • 0 <= 数组长度 <= 50000

数组有序,用两次二分查找,第一次找第一个=target的元素,第二次找第一个>target的元素,返回值是两个元素的索引相减。代码如下:

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions