--------------------------------------------------------------------------
-------------------------------------------------------------------------
python解答方法:
#coding=utf-8
import sys
#数组中有一个数字出现的次数超过数组长度的一半,请找出.
#方法1:数组排序法——将数组 nums 排序,数组中点的元素 一定为众数。
def Search1(nums):
lens = len(nums)
if(not lens or lens <= 0):#如果数组为null或者数组长度小于0,返回[]
return []
nums.sort() #将数组进行排序
middle = (lens -1)/2
#判断数据出现的次数,是否真的超过一半
numcount =0
for i in range(1,lens):
if(nums[i] == nums[middle]):
numcount +=1
if(numcount*2 > lens):
return nums[middle]
else:
print "没有"
#方法2:摩尔投票法
#假设数组中每个不同的数字就代表一个国家,而数字的个数就代表这个国家的人数,他们在一起混战,就是每两个两个同归于尽。我们就可以知道那个人数大于数组长度一半的肯定会获胜。
#就算退一万步来说,其他的所有人都来攻击这个人数最多的国家,他们每两个两个同归于尽,最终剩下的也是那个众数。
def search2(nums):
major = nums[0]
count = 1
for i in range(1,len(nums)):
if(count == 0):
#都消除完了,就重新赋值
count+=1
major=nums[i]
if(major==nums[i]):
#自己人,count就加1
count+=1
else:
#不是自己人就同归于尽,消掉1
count-=1
return major
num1 = [1,2,4,3,2,2]
print search2(num1)