zoukankan      html  css  js  c++  java
  • 剑指offer——python【第37题】数字在排序数组中出现的次数

    题目描述

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

    思路

    最贱的方法依旧是count计数。。

    当然,,看到有序数组就应该想到二分法,找到重复数字左边和右边的数字,然后两个相减就可以了

    解答

    方法1 count

    class Solution:
        def GetNumberOfK(self, data, k):
            # write code here
            if not data or len(data) ==0:
                return 0
            return data.count(k)

    方法2,不用count的计数方法

    class Solution:
        def GetNumberOfK(self, data, k):
            # write code here
            if not data or len(data) ==0:
                return 0
            num = 0
            for i in data:
                if i == k:
                    num += 1
            return num

    方法3,二分法

    class Solution:
        def GetNumberOfK(self, data, k):
            left=0
            right=len(data)-1
            leftk=self.getleftK(data,k,left,right)
            rightk=self.getrightK(data,k,left,right)
            return rightk-leftk+1
        def getleftK(self,data,k,left,right):###查找重复数字中最左边的那个数字位置
            while left<=right:
                middle=(left+right)//2
                if data[middle]<k:
                    left=middle+1
                else:
                    right=middle-1
            return left
        def getrightK(self,data,k,left,right):###查找重复数字最右边的那个数字位置
            while left<=right:
                middle=(left+right)//2
                if data[middle]<=k:
                    left=middle+1
                else:
                    right=middle-1
            return right
    人生苦短,何不用python
  • 相关阅读:
    hdu 2647 Reward
    hdu 2094 产生冠军
    hdu 3342 Legal or Not
    hdu 1285 确定比赛名次
    hdu 3006 The Number of set
    hdu 1429 胜利大逃亡(续)
    UVA 146 ID Codes
    UVA 131 The Psychic Poker Player
    洛谷 P2491消防 解题报告
    洛谷 P2587 [ZJOI2008]泡泡堂 解题报告
  • 原文地址:https://www.cnblogs.com/yqpy/p/9570251.html
Copyright © 2011-2022 走看看