zoukankan      html  css  js  c++  java
  • Go语言实现:【剑指offer】数字在排序数组中出现的次数

    该题目来源于牛客网《剑指offer》专题。

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

    看到排序数组,要想到用二分查找。

    先找到最前面的数字k,再找到最后面的数字k,通过下标求出次数。

    Go语言实现:

    func getNumberOfK(num []int, k int) int {
      length := len(num)
      firstK := getFirstK(num, k, 0, length-1)
      lastK := getLastK(num, k, 0, length-1)
      if firstK != -1 && lastK != -1 {
        return lastK - firstK + 1
      }
      return 0
    }//递归
    func getFirstK(num []int, k int, start int, end int) int {
      if start > end {
        return -1
      }
      mid := (start + end) / 2
      if num[mid] > k {
        return getFirstK(num, k, start, mid-1)
      } else if num[mid] < k {
        return getFirstK(num, k, mid+1, end)
      } else if mid-1 >= 0 && num[mid-1] == k { //mid为k,mid-1也为k
        return getFirstK(num, k, start, mid-1) //找到最前面的K
      } else {
        return mid
      }
    }//循环
    func getLastK(num []int, k int, start int, end int) int {
      length := len(num)
      mid := (start + end) / 2
      for start <= end {
        if num[mid] > k {
          end = mid - 1
        } else if num[mid] < k {
          start = mid + 1
        } else if mid+1 <= length-1 && num[mid+1] == k { //mid为k,mid+1也为k
          start = mid + 1 //找到最后面的K
        } else {
          return mid
        }
        mid = (start + end) / 2
      }
      return -1
    }
    
  • 相关阅读:
    Java Class/Method
    Data Types in Java
    Java overview && JVM
    Interface Vs. Abstract Class
    【javascript】Object三种定义方式
    【C#】导出Excel
    【javascript】简单原型链、借用构造函数
    Mysql表编码查看修改
    asp.net的mvc?
    连表
  • 原文地址:https://www.cnblogs.com/dubinyang/p/12099407.html
Copyright © 2011-2022 走看看