当前位置 博文首页 > Inmaturity_7的博客:算法练习帖--74--在排序数组中查找数字 I(

    Inmaturity_7的博客:算法练习帖--74--在排序数组中查找数字 I(

    作者:[db:作者] 时间:2021-07-16 21:45

    在排序数组中查找数字 I(C语言)

    一、题目描述

    统计一个数字在排序数组中出现的次数。
    (题目来源:力扣(LeetCode))

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

    二、解决方法

    1. 二分查找
    int search(int* nums, int numsSize, int target){
        int low=0,high=numsSize-1,mid,count=0;
        //二分查找
        while(low<=high){
            mid=(low+high)/2;
            if(nums[mid]==target){
                high=mid;
                break;
            }else if(nums[mid]>target){
                high=mid-1;
            }else{
               low=mid+1; 
            }
        }
        if(high<0){//防止数组越界
            return 0;
        }
        //向后搜索
        for(int i=high;i<numsSize;i++){
            if(nums[i]==target){
                ++count;
            }else{
                break;
            }
        }
        //向前搜索
        for(int i=high-1;i>=0;i--){
            if(nums[i]==target){
                ++count;
            }else{
                break;
            }
        }
        return count;
    }
    
    cs