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

    题目描述

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

    时间限制:1秒;空间限制:32768K;本题知识点:数组

    解题思路

    思路一

    先找循环到第一个相同数的位置索引,然后从中这个位置看判断后面连续的数是否相同,直到出现不相同的数,输出计数结果。

    # -*- coding:utf-8 -*-
    class Solution:
        def GetNumberOfK(self, data, k):
            # write code here
            if data==[]: #考虑所有可能的情况
                return 0
            count = 0
            # 如果有,找到第一个相同数的索引
            for i in range(len(data)):
                if data[i]==k:
                    break
            # 循环直到下一个数不相同
            while data[i]==k:
                count += 1
                i += 1
                # 如果是最后一个了则跳出循环
                if i == len(data):
                    break
            return count

    思路二

    用二分查找k第一次出现的位置和最后一次出现的位置。

    # -*- coding:utf-8 -*-
    class Solution:
        def GetNumberOfK(self, data, k):
            # write code here
            # 二分查找定位k的第一次出现位置和最后一次出现位置
            lower = self.getLower(data,k)
            upper = self.getUpper(data,k)
            return upper-lower+1
        # 获取k第一次出现的下标
        def getLower(self, data, k):
            start = 0
            end = len(data)-1
            mid = (start + end) // 2
            while start <= end:
                if data[mid] < k: #注意区别
                    start = mid + 1
                else:
                    end = mid - 1
                mid = (start + end) // 2
            return start
        # 获取k最后一次出现的下标
        def getUpper(self, data, k):
            start = 0
            end = len(data)-1
            mid = (start + end) // 2
            while start <= end:
                if data[mid] <= k: #注意区别
                    start = mid + 1
                else:
                    end = mid - 1
                mid = (start + end) // 2
            return end
  • 相关阅读:
    SDOI2008 沙拉公主的困惑
    HNOI2004 L语言
    SDOI2008 sue的小球
    HNOI2011 XOR和路径
    BJWC2011 元素
    CQOI2013 新nim游戏
    HNOI2007 紧急疏散
    sublime text 3将px换算为rem的插件的安装及使用
    移动端知识
    登录拦截逻辑
  • 原文地址:https://www.cnblogs.com/yucen/p/9912025.html
Copyright © 2011-2022 走看看