题目:
统计一个数字在排序数组中出现的次数。
示例:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
解题方法:
因为是排序数组,所以可以使用二分查找,二分法每次写起来都是各种奇奇怪怪的问题,这次也不太顺利,还是得多练练。这道题的主要思路就是:
- 二分法找target对应的数组索引;
- 判断二分法得到索引对应的数字是否等于target;如果等于,就从该索引向左右两侧遍历,找到所有等于target的数;如果不等于,说明数组里面没有数字等于target。
代码和结果:
class Solution {
public:
int search(vector<int>& nums, int target) {
if(nums.size()==0)
return 0;
int begin=0;
int end=nums.size();
int mid=0;
while(begin<end)
{
mid=(begin+end)/2;
if(nums[mid]==target)
break;
else if(nums[mid]>target)
end=mid;
else
begin=mid+1;
}
int cnt=0;
if(nums[mid]==target)
{
int i=mid-1;
while(i>=0)
{
if(nums[i]==target)
cnt++;
else
break;
i--;
}
i=mid+1;
while(i<nums.size())
{
if(nums[i]==target)
cnt++;
else
break;
i++;
}
cnt++;
}
else
cnt=0;
return cnt;
}
};
运行结果:
![](https://img.haomeiwen.com/i11138240/37479d1f5dfe5836.png)
原题链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/
网友评论