题解 | #数字在升序数组中出现的次数#

数字在升序数组中出现的次数

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;
    }
}

全部评论

相关推荐

05-09 14:45
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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