もっと他のアルゴリズム-028-デジタル配列が表示されますの数の半分以上

記事のディレクトリ

タイトル説明

この番号を見つけ、配列の半分以上の長さを表示される配列番号の数があります。例えば、入力アレイ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
公開された219元の記事 ウォン称賛85 ビュー14万+

おすすめ

転載: blog.csdn.net/z_feng12489/article/details/103476996