题目描述://统计一个数字在排序数组中出现的次数。
// 示例 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; } }