剑指offer - 数字在数组中出现的次数

题目描述

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

思路

二分法,分别找出数字的下确界和上确界

# -*- coding:utf-8 -*-
class Solution:
    def GetNumberOfK(self, data, k):
        if not data:
            return 0
        
        i = 0
        j = len(data)-1
        
        #找下确界
        while i<j:
            mid = int((i+j+1)//2)
            if data[mid]<k:
                i = mid
            else:  # >=k
                j = mid-1
        if data[i]==k:
            left = i-1
        else:
            left = i
        j = len(data)-1
        #上确界
        while i<j:
            mid = int((i+j)//2)
            if data[mid] <=k:
                i = mid+1
            else: #>k
                j = mid
        if data[j]==k:
            j+=1
        if j-left-1<0:
            return 0
        return j-left-1
发布了82 篇原创文章 · 获赞 2 · 访问量 4355

猜你喜欢

转载自blog.csdn.net/qq_22498427/article/details/104815793