题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
这好像是力扣上的一题,先说说我的思路吧:通过将列表数据转换为字典,这样就能方便的统计每个数字出现的次数,然后将次数与数组长度的一半比较,得出结果。
def over_half_list(list):
# 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字
len_list = len(list)
dict = {}
#转字典,方遍统计字数
for i in list:
dict[i] = list.count(i)
#判断哪个key的value>len_list/2
for k,v in dict.items():
if v > len_list/2:
print('所得到的数字是:%d,他的次数是%d,数组长度是%d'%(k,v,len_list))
list = [2,3,4,56,7,4,4,5,4,4,3,4,4,23,4,2,4,4]
over_half_list(list)
然后我看力扣上的解题思路,有种是:”直接将数组排序,取中间元素“,实在没有看懂这句话的意思,然后我将他通过代码实现,结果也不对,是不是我哪里理解出错?【按照这种方法,与我的代码给的数据,应该没有这个数据吧】
def over_half_list2(list):
for i in range(len(list)):
for j in range(len(list)-i-1):
if list[j]>list[j+1]:
list[j],list[j+1] = list[j+1],list[j]
num = int(len(list)/2)
return list[num],list
list = [2,3,4,56,7,5,3,23]
print(over_half_list2(list))