怎样在排序数组中查找数字
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,这期内容当中小编将会给大家带来有关怎样在排序数组中查找数字,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。题目:统计一个数字在排序数组中出现的次数. 例如输入排序数组
千家信息网最后更新 2025年11月10日怎样在排序数组中查找数字
这期内容当中小编将会给大家带来有关怎样在排序数组中查找数字,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
题目:
统计一个数字在排序数组中出现的次数. 例如输入排序数组{1,2,3,3,3,3,4,5},由于3在这个数中出现了4次,输出4.
# -*- coding: utf-8 -*-# @Time : 2019-07-13 15:10# @Author : Jayce Wong# @ProjectName : job# @FileName : getNumberOfK.py# @Blog : https://blog.51cto.com/jayce1111# @Github : https://github.com/SysuJaycedef getFirstK(data, k): start, end = 0, len(data) - 1 while start <= end: mid = (start + end) >> 1 if data[mid] == k: # 关键在于,如果mid是k,那么就判断前一个元素是不是也是k,如果是,说明这个位置不是 # 第一次出现,要在左边继续查找。否则,直接返回mid,因为是第一次出现了 if mid - 1 >= start and data[mid - 1] == k: end = mid - 1 else: return mid elif data[mid] < k: start = mid + 1 else: end = mid - 1 return -1def getLastK(data, k): start, end = 0, len(data) - 1 while start <= end: mid = (start + end) >> 1 if data[mid] == k: if mid + 1 <= end and data[mid + 1] == k: start = mid + 1 else: return mid elif data[mid] < k: start = mid + 1 else: end = mid - 1 return -1def getNumberOfK(data, k): """ 要获取一个有序数组中某个元素出现的次数,最直观的做法就是遍历整个数组,然后统计该元素的出现次数, 这样做的时间复杂度是O(n) 但是由于这个数组是有序的,我们可以考虑利用二分查找的方法来解决这个问题。 如果我们先利用二分查找定位到了这个元素,然后再往前往后遍历,这样的话时间复杂度也还是O(n)。 但是如果我们在利用二分查找的时候,想办法定位这个元素第一次出现的下标和最后一次出现的下标。 在利用二分查找找到一个这个元素之后,判断这个元素是否是第一个,也就是对比这个元素的前一个是否也 是k,如果不是,说明这个元素就是第一个元素,否则在这个下标的左边继续查找。 对于最后一次出现的下标同理。 """ if not data: return 0 first = getFirstK(data, k) last = getLastK(data, k) if first != -1 and last != -1: return last - first + 1 else: return 0def main(): data = [1, 2, 3, 3, 3, 3, 4, 5] k = 3 print(getNumberOfK(data, k))if __name__ == '__main__': main()
上述就是小编为大家分享的怎样在排序数组中查找数字了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。
元素
数组
排序
下标
数字
就是
次数
第一次
复杂
有序
内容
复杂度
时间
分析
定位
统计
直观
这样的话
专业
中小
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
2018年网络安全线上答题
广日电梯服务器怎么呼梯
北京网络技术有限公司招聘
新建的数据库的密码
广州中普软件开发有限公司
计算机应用技术网络安全方向
地方法律法规数据库官网
关于加强网络安全的发言稿
与网络技术有关的但不发达APP
金蝶数据库实体位置
企业微信审批结果写入数据库
广州三赢互联网科技有限公司
碑林区软件开发培训班
服务器改网络名
2018三级网络技术真题
广东net软件开发哪家可靠
电话与移动数据库
音视频数据库
excel分析数据库下载
sql找出有重复的数据库
mac搭建本地sip服务器
软件开发系统图工具
网络安全知识之撞库
各数据库连接字符串
浦东新区网络技术服务包括什么
有没有网络技术app
建站服务器单核双核怎么选
ppt软件开发
软件开发项目接单平台
网络安全应急指挥处