1. 程式人生 > >劍指offer——判斷陣列中出現次數過半的數值

劍指offer——判斷陣列中出現次數過半的數值

根據題目,主要解決兩個問題,一個是判斷出現陣列出現的次數,二是輸出出現次數過半的數值,無則返回0。根據這種情況,腦中第一個出現的就是用字典解決,判斷value,輸出key。

class Solution:
	def MoreThanHlafNum_Solution(self,numbers):
		dict={}
		for i in numbers:
			if not dict.has_key(i):
				dict[i]=1
			else:
				dict[i]+=1
			if dict[i]>len(numbers)/2.0:
				return i
		return 0

另解:
這種方法看起來比較巧,比較難想。如果存在一個次數過半的數值,它的出現的次數一定會比其他數值的總和要多。

class Solution:
	def MoreThanHlafNum_Solution(self,nunbers):
		if not numbers:
			return 0
		num=numbers[0]
		count=1
		for i  in  range(1,len(numbers)):
			if numbers[i]==num:
				count+=1
			else:
				count-=1
			if count==0:
				num=numbers[i]
				count=1
		count=0
		for j in numbers:
			if j ==num:
				count+=1
		return num if count>len(numbers)/2.0 else 0