题解 | #数字在升序数组中出现的次数#
数字在升序数组中出现的次数
https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2
import java.util.*;
public class Solution {
/**
* 解题思路:由于都是整数,找k+0.5时,left指针一定是指向比k大的下一个数,rigth指针
* 一定是指向K的右边界。找k-0.5时,left指向指向k的左边界,right指向比k
小的上一个数。因此left-left 或者right-right 都可以得到结果
*
* @param nums int整型一维数组
* @param k int整型
* @return int整型
*/
public int GetNumberOfK (int[] nums, int k) {
// k+0.5 应该出现的位置和 k-0.5应该出现的位置
return bisearch(nums,k+0.5) - bisearch(nums,k-0.5);
}
private int bisearch(int[] data,double k){
int left =0;
int right = data.length-1;
while(left <= right){
int mid = (left+right) / 2;
if(data[mid]<k){
left = mid+1;
}else if(data[mid]>k){
right = mid -1;
}
}
return right;
}
}
