剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)

1. 题目

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

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

示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
 
限制:
0 <= 数组长度 <= 50000

类似题目:LeetCode 34. 在排序数组中查找元素的第一个和最后一个位置(二分查找)

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 二分查找变形
  • 查找第一个等于target的数字
class Solution {
public:
    int search(vector<int>& nums, int target) {
        int i = binarysearchFirstTarget(nums,target);
        if(i == -1)
        	return 0;
        int count = 0, k;
        for(k = i; k < nums.size(); ++k)
        	if(nums[k] == target)
        		count++;
    	return count;
    }

    int binarysearchFirstTarget(vector<int>& nums, int& target)
    {
    	int l = 0, r = nums.size()-1, mid;
    	while(l <= r)
    	{
    		mid = l +((r-l)>>1);
    		if(nums[mid] < target)
    			l = mid+1;
    		else if(nums[mid] > target)
    			r = mid-1;
    		else
    		{
    			if(mid == 0 || nums[mid-1] != nums[mid])
    				return mid;
    			else
    				r = mid-1;
    		}
    	}
    	return -1;
    }
};

在这里插入图片描述

发布了645 篇原创文章 · 获赞 496 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/qq_21201267/article/details/104335429