剑指offer(37)数字在排序数组中出现的次数

/** * 题目:数字在排序数组中出现的次数 如输入{1,2,3,3,3,3,4,5},3出现次数为4. * * @author hexiaoli 思路:剑指offer 1)遍历 * 2)利用二分查找法,先拿中间数字和k比较,如果中间数字<k说明在右半部分,如果中间数字>k说明在左半部分 * 如果相等,需要需要向左向右判断相邻的数字是不是k...
摘要由CSDN通过智能技术生成
/**
 * 题目:数字在排序数组中出现的次数 如输入{1,2,3,3,3,3,4,5},3出现次数为4.
 * 
 * @author hexiaoli 思路:剑指offer 1)遍历
 *         2)利用二分查找法,先拿中间数字和k比较,如果中间数字<k说明在右半部分,如果中间数字>k说明在左半部分
 *         如果相等,需要需要向左向右判断相邻的数字是不是k,再扩展
 */

public class Main {
	public static int GetNumberOfK(int[] array, int k) {
		// 边界
		if (array == null || array.length == 0) {
			return 0;
		}
		int first = getFirstK(array, k, 0, array.length - 1);
		int last = getLastK(array, k, 0, array.length - 1);
		if (first == -1 || last == -1) {
			return 0;
		}
		return (last - first + 1);
	}

	public static int getFirstK(int[] array, int k, int head, int tail) {
		while (head <= tail) {
			int mid = (head + tail) >> 1;
			if (k > array[mid]) {
				head = mid + 1;
			} else if (k < array[mid]) {
				tail = mid - 1;
			} else {// 如果中间位置正好是k,需要判断mid对应位置的左边
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值