问题描述
小R从班级中抽取了一些同学,每位同学都会给出一个数字。已知在这些数字中,某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。小R从班级中抽取了一些同学,每位同学都会给出一个数字。已知在这些数字中,某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。小R从班级中抽取了一些同学,每位同学都会给出一个数字。已知在这些数字中,某个数字的出现次数超过了数字总数的一半。现在需要你帮助小R找到这个数字。小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`
解题思路
- 建立一个字典用来统计每个数字出现的次数
- 然后再把每个数字出现的相应的次数分别与数字总数的一半进行比较,判断哪一个是大于总数一半的,之后在进行输出那个那个数字
详细实现
def solution(array):
count_dict = {} # 建立一个空字典
for number in array: # 循环记录每个数字出现的个数
if number in count_dict: # 检查数字是否在字典中
count_dict[number] += 1
else:
count_dict[number] = 1
list_count_dict = list(count_dict.items())
for i in list_count_dict:
if i[1] > len(array) / 2: # 检查出现次数是否超过一半
return i[0]
if __name__ == "__main__":
# Add your test cases here
print(solution([1, 3, 8, 2, 3, 1, 3, 3, 3]))
代码解释
- 建立一个空字典,之后循环数组中的数字,如果数字不在字典中就让该数字的值等于1,如果在字典中就让该数字的值在原来的基础上加1
- 得到字典中的键值对,并以列表的形式存储。之后for循环列表,代码中的
i[1]就是每个数字在数组中出现的次数。
心得体会
这个题目个人认为是比较简单的,没有陷入到知识盲区
借鉴
如果有觉得我写的有缺陷的地方可以留言哟!如果有感兴趣的友友们,可以在评论区留言你们的代码,相互借鉴学习一下哈哈哈哈!