码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-06-24 15:25:25      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:

题目

统计一个数字在排序数组中出现的次数。

解题

方法一:暴力
线性遍历
方法二:二分法
分别求出左右边界

public class Solution {
    public int GetNumberOfK(int [] array , int k) {
        if(array == null|| array.length==0)
            return 0;
       int low = 0;
        int high = array.length -1;
        int l = left(array,low,high,k);
        if(l ==-1)
            return 0;
        int r = right(array,l,high,k);

        return r-l + 1;
    }
    // 求左边界
    public int left(int[] array,int low ,int high,int k){
        if(array[low] == k)
            return low;
        while(low <= high){
            int mid = low + (high - low)/2;
            if(mid >=1 && array[mid-1]!=k && array[mid] ==k) // mid - 1越界要判断
                return mid;
            if(array[mid] >=k){  // 考虑等于
                high = mid - 1;
            }else {
                low = mid + 1;
            }
        }
        return -1;
    }
    // 求右边界
    public int right(int[] array,int low ,int high,int k){
        if(array[high] == k)
            return high;
        while(low <= high){
            int mid = low + (high - low)/2;
            if(mid + 1 < array.length && array[mid]==k && array[mid+1] !=k) // mid + 1越界要判断
                return mid;
            if(array[mid] >k){
                high = mid - 1;
            }else { // 等于在这里考虑
                low = mid + 1;
            }
        }
        return -1;
    }
}

当然也可以求出一个边界,然后再线性查找

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

标签:

原文地址:http://blog.csdn.net/qunxingvip/article/details/51747272

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!