【競技プログラミング】「Majority Element」with Python | LeetCode #169

Python

こちらは「Majority Element」のPythonによる解答例となっております。この問題は、長さnの配列numsが与えられたとき、出現回数がn/2を超える要素を返す問題です。

問題

長さnの配列 nums が与えられたとき、出現回数がn/2を超える要素を返します。

  • nums は長さが1以上の整数の配列です。
  • 3 <= n <= 5*10^4
  • 2^31 <= nums[i] <= 2^31 - 1

解法

この問題は、ソートを用いた1つのアプローチがあります。出現回数がn/2を超える要素は必ず存在するため、配列をソートした後にnums[n/2]を返すことができます。

アルゴリズムの概要を以下に述べます。

  1. 配列をソートします。
  2. nums[n/2]を返します。

Pythonコード

以下のコードが、「Majority Element」を解くためのPythonプログラムとなります。

### Function ##################################################################

def solve(num=0):
    
    solver  = Solution().majorityElement
    
    if 1 <= num <= Input().input: id_LIST = [num]
    else: id_LIST = [id+1 for id in range(Input().input)]
    
    for id in id_LIST:
        data    = Input(id)
        ans     = solver(data.nums)
        result  = "OK" if ans==data.ans else "NG"
        print(f"[{str(id).zfill(3)}] {result}")

### Class #####################################################################

class Solution(object):
    
    def majorityElement(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums.sort()
        return nums[len(nums)//2]
    
    # def majorityElement(self, nums):
    #     """
    #     :type nums: List[int]
    #     :rtype: int
    #     """
    #     DICT = {}

    #     for val in nums:
    #         if val not in DICT: DICT[val] = 1
    #         else: DICT[val] += 1
        
    #     return [key for key, val in DICT.items() if val==max(DICT.values())][0]

#==============================================================================

class Input:
    
    def __init__(self, num=0):
        
        if num == 1:
            self.nums = [3,2,3]
            self.ans    = 3
        
        elif num == 2:
            self.nums   = [2,2,1,1,1,2,2]
            self.ans    = 2
        
        else:
            self.input  = 2

### Main ######################################################################

if __name__ == "__main__":

    solve()

###############################################################################