来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8 输出: 2
示例 2:输入: nums = [5,7,7,8,8,10], target = 6 输出: 0
解法一:
简单暴力,直接循环
int search(int* nums, int numsSize, int target){
int count=0;
for(int i=0;i<numsSize;i++)
{
if(nums[i]==target)
{
count++;
}
}
return count;
}
解法二:
利用二分查找,最终保持target在下标为left~numsSize-1的范围内,然后再遍历这个范围找到target的个数。
代码:
int search(int* nums, int numsSize, int target){
int left=0,right=numsSize-1,count=0;
while(left<right)
{
int mid = (left+right)/2;
if(nums[mid]>=target)
{
right=mid;
}
else
{
left=mid+1;
}
}
for(int i=left;i<numsSize;i++)
{
if(nums[i]==target)
{
count++;
}
}
return count;
}
解法三:
利用哈希map解决,将nums中的元素作为下表也就是key,将每个元素出现的次数作为value,这样的话我们只需要知道key==target时候的value值是多少即可。
代码稍后更新(由于目前对于STL中的map使用不熟悉,等小白熟悉如何用它后再来更新~)
这篇博客介绍了三种在排序数组中查找特定数字出现次数的方法。第一种是简单的线性搜索,时间复杂度为O(n);第二种是利用二分查找优化,将时间复杂度降低到O(logn);第三种则是借助哈希映射,进一步提高查找效率。通过具体的示例代码,展示了每种方法的实现细节。
169

被折叠的 条评论
为什么被折叠?



