青训7_1114_02 找出整型数组中占比超过一半的数(字典值获取用get安全)
文章目录
- 青训7_1114_02 找出整型数组中占比超过一半的数(字典值获取用get安全)
- 问题描述
- 测试样例
- 示例
- 思路
- 解题思路
- 答案
- 注意点 获取字典值写法推荐用get含默认值
- 字典的创建:
- 2 字典的访问和设置 推荐原因!!:
问题描述
小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 herereturn 0if __name__ == "__main__":# Add your test cases hereprint(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 numreturn Noneif __name__ == "__main__":# Add your test cases hereprint(solution([1, 3, 8, 2, 3, 1, 3, 3, 3]) == 3)
注意点 获取字典值写法推荐用get含默认值
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}