当前位置: 首页 > news >正文

Python解决“找出整形数组中占比超过一半的数”问题

这里写目录标题

  • 问题描述
  • 测试样例
  • 解决思路
  • 代码
    • 法1
    • 法2

问题描述

小R从班级中抽取了一些同学,每位同学都会给出一个数字。已知在这些数字中,某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。

测试样例

样例1:
输入:array = [1, 3, 8, 2, 3, 1, 3, 3, 3]
输出:3

样例2:
输入:array = [5, 5, 5, 1, 2, 5, 5]
输出:5

样例3:
输入:array = [9, 9, 9, 9, 8, 9, 8, 8]
输出:9

解决思路

这道题目综合运用了哈希表和计数算法知识。题目要求找出数组中出现次数超过一半的数字。由于题目明确指出存在这样的数字,因此我们可以通过统计每个数字的出现次数来找到答案。使用哈希表(Python中的Counter)可以高效地统计每个数字的出现次数,然后遍历哈希表找到出现次数超过数组长度一半的数字。

统计数字出现次数:使用Counter对数组中的每个数字进行计数,生成一个哈希表,键为数字,值为该数字在数组中出现的次数。
查找超过一半的数字:遍历哈希表,找到第一个满足出现次数乘以2大于数组长度的数字,即为答案。

时间复杂度:O(n),其中n是数组的长度。我们需要遍历数组一次来统计数字的出现次数,然后再遍历哈希表一次来找到目标数字。
空间复杂度:O(n),哈希表的空间复杂度与数组中不同数字的数量成正比,最坏情况下为n。

代码

法1

根据思路逻辑解法

def solution(array):
    # 创建一个字典来记录每个数字的出现次数
    count_dict = {}
    
    # 遍历数组,统计每个数字的出现次数
    for num in array:
        # 如果数字已经在字典中,增加其计数
        if num in count_dict:
            count_dict[num] += 1
        else:
            # 如果数字不在字典中,初始化其计数为1
            count_dict[num] = 1
    
    # 找到出现次数超过数组长度一半的数字
    half_length = len(array) // 2
    for num, count in count_dict.items():
        if count > half_length:
            return num
    
    # 如果没有找到符合条件的数字,返回0(虽然题目保证一定存在这样的数字)
    return 0

if __name__ == "__main__":
    # 添加你的测试用例
    print(solution(array = [1, 3, 8, 2, 3, 1, 3, 3, 3]))
    print(solution(array = [5, 5, 5, 1, 2, 5, 5]))
    print(solution(array = [9, 9, 9, 9, 8, 9, 8, 8]))

法2

简化方法:

def solution(array: list) -> int:
    from collections import Counter
    c = Counter(array)
    return next(k for k, v in c.items() if v * v > len(array))


if __name__ == '__main__':
    print(solution(array = [1, 3, 8, 2, 3, 1, 3, 3, 3]) == 3)
    print(solution(array = [5, 5, 5, 1, 2, 5, 5]) == 5)
    print(solution(array = [9, 9, 9, 9, 8, 9, 8, 8]) == 9)

相关文章:

  • AI介入软件测试过程可行的环节和帮助机制
  • 科普:“图相似性”与“文本相似性”
  • 【音视频】ffmpeg命令分类查询
  • LabVIEW设备长期稳定运行程序设计要点
  • MySQL安装教程
  • 【数据结构】二叉树总结篇
  • 二百八十五、华为云PostgreSQL——建分区表并设置主键
  • *动态规划(4)
  • 精讲坐标轴系统(Axis)
  • 实现浏览器交互Ai Web Ui-本地化部署的deepseek + Ollama + Page Assist
  • 开源表单、投票、测评平台部署教程
  • 专题二最大连续1的个数|||
  • 嵌入式Linux堆栈管理深度解析:从原理到实践
  • 【零基础到精通Java合集】第十八集:多线程与并发编程-线程池与Callable/Future应用
  • centos搭建 Node.js 开发环境
  • 金蝶云星空对接纷享销客与泛微审批:构建高效的企业数字化流程
  • deepseek本地部署:deepseek-r1-distill-llama-70b应用实践
  • Linux云计算SRE-第十七周
  • 人工智能之数学基础:线性代数中的行列式的介绍
  • 迷你世界脚本小地图接口:Mapmark
  • 做谱的网站/如何把网站推广出去
  • wine wordpress theme/百度ocpc如何优化
  • 做竞拍网站合法吗/百度信息流是什么
  • 网站建设常识/青岛网站制作公司
  • 网站建设制作设计/百度指数是怎么计算的
  • 香港网站空间价格/最新新闻热点素材