青训7_1114_02 找出整型数组中占比超过一半的数(字典值获取用get安全)

青训7_1114_02 找出整型数组中占比超过一半的数(字典值获取用get安全)

问题描述

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

测试样例

输入:array = [1,3,8,2,3,1,3,3,3] 输出:3
输入:array = [5,5,5,1,2,5,5]输出:5
输入:array = [9,9,9,9,8,9,8,8]输出:9

示例

def solution(array):
    # Edit your code here
    return 0

if __name__ == "__main__":
    # Add your test cases here
    print(solution([1, 3, 8, 2, 3, 1, 3, 3, 3]) == 3)

思路

获取总数/2

然后给每个数字计算数量(用字典)

解题思路

首先计算数组长度的一半,作为判断标准

使用字典(dict)来统计每个数字出现的次数

在遍历过程中,一旦发现某个数字的出现次数超过数组长度的一半,就立即返回该数字

答案

def solution(array):
    # 获取数组长度的一半
    half_length = len(array) // 2
    
    # 使用字典来统计每个数字出现的次数
    count_dict = {}
    
    # 遍历数组,统计每个数字出现的次数
    for num in array:
        count_dict[num] = count_dict.get(num, 0) + 1
        # 如果某个数字出现次数超过半数,直接返回
        if count_dict[num] > half_length:
            return num
    
    return None

if __name__ == "__main__":
    # Add your test cases here

    print(solution([1, 3, 8, 2, 3, 1, 3, 3, 3]) == 3)

注意点 获取字典值写法推荐用get含默认值

  1. 字典的创建:

count_dict = {}  # 创建空字典

大括号 {} 是创建字典的语法。字典是一种键值对的数据结构,每个键(key)对应一个值(value)。

2 字典的访问和设置 推荐原因!!:

# 方式1:使用中括号 []
count_dict[num] = count_dict[num] + 1  # 如果 num 不存在会报错

# 方式2:使用 get() 方法(更安全)
count_dict[num] = count_dict.get(num, 0) + 1  # 如果 num 不存在返回默认值 0

.get() 方法的好处:

  • get(key, default_value)
    

    有两个参数:

    • key: 要查找的键
    • default_value: 如果键不存在时返回的默认值
  • 更安全,避免 KeyError 错误

举个具体例子:

# 假设数组是 [1, 3, 1]
count_dict = {}

# 第一次遇到 1
count_dict[1] = count_dict.get(1, 0) + 1
# 等价于:count_dict[1] = 0 + 1
# 现在 count_dict 是 {1: 1}

# 第一次遇到 3
count_dict[3] = count_dict.get(3, 0) + 1
# 等价于:count_dict[3] = 0 + 1
# 现在 count_dict 是 {1: 1, 3: 1}

# 第二次遇到 1
count_dict[1] = count_dict.get(1, 0) + 1
# 等价于:count_dict[1] = 1 + 1
# 最终 count_dict 是 {1: 2, 3: 1}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值