zoukankan      html  css  js  c++  java
  • 剑指Offer_37_数字在排序数组中出现的次数

    题目描述

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

    解题思路

    1. 解法1
      遍历数组,比较给定值和数组中元素的值。

    2. 二分查找
      我们需要找到第一个和最后一个k,如果中间值大于给定值k,那么k在前半段,小于k则在后半段。相等,则判断前面的值是否等于k,如果相等,说明第一个k在前面,否则第一个k就是当前值。同理找到最后一个k。因为是排序的,所以k都在一起,就可以通过最后一个k和第一个k求出k的个数。

    实现

    这里实现第二种解法。

    public class Solution {
        public int GetNumberOfK(int [] array , int k) {
            if (array == null || array.length <= 0) return 0;
            int first = getFirstK(array,k,0,array.length-1);
            if (first == -1) return 0;
            int last = getLastK(array,k,0,array.length-1);
            return last - first + 1;
        }
    
        private int getLastK(int[] array, int k, int start, int end) {
            if (start > end) return -1;
            int mid = (start+end) / 2;
            if (array[mid] > k){
                return getLastK(array, k, start, mid - 1);
            }else if (array[mid] < k){
                return getLastK(array, k, mid + 1, end);
            }else {
                if (mid==end || (mid < end && array[mid+1] != k)){
                    return mid;
                }else {
                    return getLastK(array, k, mid+1, end);
                }
            }
        }
    
        private int getFirstK(int[] array, int k, int start, int end) {
            if (start > end) return -1;
            int mid = (start+end) / 2;
            if (array[mid] > k){
                return getFirstK(array, k, start, mid - 1);
            }else if (array[mid] < k){
                return getFirstK(array, k, mid + 1, end);
            }else {
                if (mid==start || (mid > start && array[mid-1] != k)){
                    return mid;
                }else {
                    return getFirstK(array, k, start, mid-1);
                }
            }
        }
    }
    
  • 相关阅读:
    【设计模式】6.模板方法模式
    【设计模式】5.原型模式
    【设计模式】4.工厂模式
    【设计模式】3.代理模式
    zookeeper集群的搭建
    zookeeper实现分布式锁的原理和一个小例子
    zookeeper配置管理实现原理----监听事件watch
    zookeeper的javaAPI操作(基于Curator的CRUD)
    java.lang.IllegalArgumentException: A HostProvider may not be empty!
    Zookeeper的安装和基本操作
  • 原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5794442.html
Copyright © 2011-2022 走看看