【剑指offer】统计有一个数字在排序数组中出现的次数

题目要求

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

核心思想

除了暴力求解以外,可以进行改进,利用二分法来做。

完整代码如下

/**
 * 统计有一个数字在排序数组中出现的次数
 * @author mac
 * 采用二分法
 */
public class Solution {
	public int GetNumberCount(int [] array, int k) {
		int leftIndex = -1;
		int start = 0;
		int end = array.length;
		while(start <= end) {
			int mid = (start + end) / 2;
			if(array[mid] > k) {
				end = mid - 1;
			} else if(array[mid] < k) {
				start = mid + 1;
			} else {
				leftIndex = mid;
				end = mid - 1;
			}
		}
		start = 0;
		end = array.length - 1;
		int rightIndex = -1;
		while(start <= end) {
			int mid = (start + end) / 2;
			if(array[mid] > k) {
				end = mid - 1;
			} else if(array[mid] < k) {
				start = mid + 1;
			} else {
				rightIndex = mid;
				end = mid + 1;
			}
		}
		if(array.length == 0 || rightIndex == -1) {
			return 0;
		}
		return rightIndex - leftIndex + 1;
	}
	

}

你可能感兴趣的:(算法)