zoukankan      html  css  js  c++  java
  • 剑指 Offer 53

    题目

    统计一个数字在排序数组中出现的次数。
    示例:
    输入: 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;
    }
  • 相关阅读:
    UVa 106
    UVa 111
    UVa 105
    UVa 104
    UVa 103
    UVa 102
    UVa 101
    UVa 100
    就决定是你了!
    阿姆斯特朗回旋加速喷气式阿姆斯特朗炮
  • 原文地址:https://www.cnblogs.com/ghlz/p/13381996.html
Copyright © 2011-2022 走看看