169.衆数を求める(Python)
2037 ワード
タイトル
難易度:★☆☆☆☆タイプ:数学
nの大きさの配列を与え,その中の衆数を見つけた.衆数とは,配列に現れる回数がn/2⌋より大きい要素を指す.
配列は空ではなく、与えられた配列は常に衆数が存在すると仮定することができます.
例
例1:入力:[3,2,3]出力:3
例2:入力:[2,2,1,1,2,2]出力:2
に答える
シナリオ1:辞書(ハッシュ表)
出現回数が最も多い数を見つけるために、最も簡単な論理は、毎回の数が現れる回数を統計し、その中で最も出現回数が多い数を取り出すことです.この方法は簡単ですが、メモリのオーバーヘッドが大きいです.
シナリオ2:数値統計
この問題で求められる衆数の定義は従来の概念とは異なり,ここで衆数の出現回数は配列中の他のすべての要素よりも多く,この原理に基づいて結果変数(res)を配列の最初の数に初期化し,統計変数(count)を用意し,この変数が結果と同じ数に遭遇すると1を加算し,そうでないと1を減算する.ゼロに減算すると、交換結果変数は次の数になります.衆数の出現回数が他の文字より多いため、配列遍歴が終了すると統計変数は必ずゼロより大きくなり、この場合、結果変数の数が衆数になります.
シナリオ3:ソート
ここで衆数の出現回数は他の要素を上回っているので,データを並べ替えた後,真ん中の数字は必ず衆数である.
質問やアドバイスがあれば、コメントエリアへようこそ~
難易度:★☆☆☆☆タイプ:数学
nの大きさの配列を与え,その中の衆数を見つけた.衆数とは,配列に現れる回数がn/2⌋より大きい要素を指す.
配列は空ではなく、与えられた配列は常に衆数が存在すると仮定することができます.
例
例1:入力:[3,2,3]出力:3
例2:入力:[2,2,1,1,2,2]出力:2
に答える
シナリオ1:辞書(ハッシュ表)
出現回数が最も多い数を見つけるために、最も簡単な論理は、毎回の数が現れる回数を統計し、その中で最も出現回数が多い数を取り出すことです.この方法は簡単ですが、メモリのオーバーヘッドが大きいです.
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
count = {}
for num in nums: #
if num in count:
count[num] += 1
else:
count[num] = 1
return {v: k for k, v in count.items()}[max(count.values())] # ,
シナリオ2:数値統計
この問題で求められる衆数の定義は従来の概念とは異なり,ここで衆数の出現回数は配列中の他のすべての要素よりも多く,この原理に基づいて結果変数(res)を配列の最初の数に初期化し,統計変数(count)を用意し,この変数が結果と同じ数に遭遇すると1を加算し,そうでないと1を減算する.ゼロに減算すると、交換結果変数は次の数になります.衆数の出現回数が他の文字より多いため、配列遍歴が終了すると統計変数は必ずゼロより大きくなり、この場合、結果変数の数が衆数になります.
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
count, res = 0, nums[0] #
for i in range(len(nums)-1): #
if nums[i] == res: #
count += 1 # +1
else: #
count -= 1 # -1
if count == 0: # 0
res = nums[i+1] #
return res #
シナリオ3:ソート
ここで衆数の出現回数は他の要素を上回っているので,データを並べ替えた後,真ん中の数字は必ず衆数である.
class Solution(object):
def majorityElement(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
return nums[len(nums) // 2]
質問やアドバイスがあれば、コメントエリアへようこそ~