数组中出现次数超过一半的数字
思路:1.借用列表、字典的相关功能。
2.抵消法:超过一半数字可以抵消掉其他数字的总和。
1.
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
num_list = []
count_list = []
for num in numbers:
if num in num_list:
count_list[num_list.index(num)] += 1
else:
num_list.append(num)
count_list.append(1)
max_num = max(count_list)
if max_num > len(numbers)//2:
return num_list[count_list.index(max_num)]
else:
return 0
或
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
length_dict = {}
for num in numbers:
if num in length_dict:
length_dict[num] += 1
else:
length_dict[num] = 1
for key in length_dict:
if length_dict[key] > len(numbers)//2:
return key
return 0
def MoreThanHalfNum_Solution(numbers):
len1 = len(numbers)
if len1==0:
return 0
elif len1>=1:
# 遍历每个元素,并记录次数;若与前一个元素相同,则次数加1,否则次数减1
res = numbers[0] # 初始值
count = 1 # 次数
for i in range(1,len1):
if count == 0:
# 更新result的值为当前元素,并置次数为1
res = numbers[i]
count = 1
elif numbers[i] == res:
count += 1 # 相同则加1
elif numbers[i] != res:
count -= 1 # # 不同则加1
# 判断res是否符合条件,即出现次数大于数组长度的一半
counts = 0
for j in range(len1):
if numbers[j] == res:
counts += 1
if counts>len1//2: # python3整除为//,python2为/
return res
else:
return 0
if __name__ == '__main__':
try:
while True:
arr = [int(i) for i in input().split()]
print(MoreThanHalfNum_Solution(arr))
except:
pass