タイトル説明
この番号を見つけ、配列の半分以上の長さを表示される配列番号の数があります。例えば、入力アレイ9の長さ{1,2,3,2,2,2,5,4,2}
。数2は5回、アレイ内のアレイの半分以上の長さ、出力2が表示されているので。0出力がある場合。
分析
-
方法1:使用して
python字典
、デジタル記録の各出現counter
、その後トラバース結果が得られ、時間複雑さO(n)
、空間的複雑O(n)
。そして、この方法でもよい扩展
配列が表示された回数を超えた回数を持っているよう任意次
。 -
方法2:アレイは、図面の数と言うことであるアレイの半分以上の長さを発生しました
它出现的次数比其他所有数字出现次数的和还要多
。したがって、我々は時間の配列を介して2つの値を保存検討することができます:1は、数値配列、回数です。- 私たちは時に次の桁と私たち以前に保存された番号が同じであれば、数プラス1次の桁にトラバースすると、
- 我々は数字の前に保存され、次の番号が異なる場合、数マイナス1。
- 数がゼロの場合、我々は次の番号を保存する必要があり、その数は1に設定されています。
コード
- この方法の一つ:
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
dictH = {}
length = len(numbers)
for i in numbers:
if i in dictH:
dictH[i] += 1
else:
dictH[i] = 1
for i in set(numbers):
if dictH[i] > length/2:
return i
return 0
- 方法2:
# -*- coding:utf-8 -*-
class Solution:
def MoreThanHalfNum_Solution(self, numbers):
# write code here
if not numbers:
return 0
res = numbers[0]
counter = 1
length = len(numbers)
for i in numbers[1:]:
if i==res:
counter += 1
else:
counter -= 1
if counter == 0:
res = i
counter = 1
if numbers.count(res)>length/2:
return res
return 0