剑指offer53在排序数组中查找数字

题目描述://统计一个数字在排序数组中出现的次数。
// 示例 1:
// 输入: nums = [5,7,7,8,8,10], target = 8
//输出: 2
// 示例 2:
// 输入: nums = [5,7,7,8,8,10], target = 6
//输出: 0
// 限制:
// 0 <= 数组长度 <= 50000
// 注意:本题与主站 34 题相同(仅返回值不同):https://leetcode-cn.com/problems/find-first-and-last-
//position-of-element-in-sorted-array/
// Related Topics 数组 二分查找
解题思路:采用二分法来解决,先给出两个指针分别指向数组的首段与末端,然后取中间数nums[m]与目标数target进行对比,若中间数小于等于target则说明目标数的右边界在中间数nums[m]的右边,所以执行i=m+1;反之右边界在中间数nums[m]的左边,则执行j=m-1;当i>j时跳出循环,此时的i所对应的位置即为target的右边界。用同样的方法,只是把target改为target-1,这样就得到了比目标值小1的右边界,两者相减就得到了target的长度。
代码如下:

class Solution {
    public int GetNumberOfK(int[] nums, int target) {
                  return helper(nums,target)-helper(nums,target-1);
    }
    int helper(int[] nums,int tar){
        int i=0,j=nums.length-1;
        while (i<=j){
            int m=(i+j)/2;
            if(nums[m]<=tar)i=m+1;
            else j=m-1;
        }
        return i;
    }
}
全部评论

相关推荐

淬月星辉:专利是什么?至少描述一下吧,然后把什么计算机二级、普通话这种拉低格调的证书删掉,不然hr以为你没东西写
点赞 评论 收藏
分享
天降大厂offer:想从事前端就放前端的技术栈,然后项目描述,还有项目做了什么内容,使用了什么技术解决了什么问题优化了什么性能。然后头像可以不要,在读也可以不要,还有bg的话就不要放课程,写哪个学校什么本科,还有绩点排名(如果高的话),然后就是技术栈写好一点,接下来就是项目(有实习就写实习,没有就到项目),项目放两个好一点的,自己包装一下,然后有参加什么竞赛放两个就好了,接下来就是靠你自己了,毕竟211还是很难容易找的,不像我们学院本
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务