前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)

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

作者头像
Michael阿明
发布2020-07-13 17:36:47
8540
发布2020-07-13 17:36:47
举报

1. 题目

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

代码语言:javascript
复制
示例 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的数字
代码语言:javascript
复制
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;
    }
};
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档