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);
                }
            }
        }
    }
    
  • 相关阅读:
    [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED3.txt
    模态登录
    javascript unshift()和shift()
    登录拦截功能
    springmvc 拦截器的使用小结
    handsontable 和 echarts都定义了require方法,初始化时冲突了,怎么办?
    eclipse缓慢了么?
    springmvc处理日期格式
    hibernate设置了not-null 为什么无效?
    java 和 javascript CryptoJS 进行HmacSHA1加密
  • 原文地址:https://www.cnblogs.com/ggmfengyangdi/p/5794442.html
Copyright © 2011-2022 走看看