剑指 Offer 53 - I. 在排序数组中查找数字 I

题目

统计一个数字在排序数组中出现的次数。
示例:
输入: nums = [5,7,7,8,8,10], target = 8 输出: 2

解题思路

使用二分法查找,找到与目标数字相等的值的最左侧位置,然后向后移动,记录目标数字的次数。

代码

   public int search(int[] nums, int target) {
    if (nums==null||nums.length==0){
        return 0;
    }
    int left = 0;
    int right = nums.length-1;
    int count = 0;//记录target出现的次数
    while (left<right){
        int mid=left+((right-left)>>1);//防溢出

        if (nums[mid]>=target){
            right=mid;
        }else if (nums[mid]<target){
            left=mid+1;
        }
    }
    while (left<nums.length&&nums[left++]==target){
        count++;
    }
    return count;
}
上一篇:leetcode 剑指 Offer 53 - I. 在排序数组中查找数字 I


下一篇:动态规划之最大子序和(53)