【競技プログラミング】「Remove Duplicate From Sorted Array」with Python | LeetCode #26

Python

こちらは「Remove Duplicate From Sorted Array」のPythonによる解答例となっております。この問題は、ソートされた整数の配列から重複した要素を削除し、残った要素の数を返す問題です。

問題

ソートされた整数の配列 nums が与えられたとき、重複した要素を削除し、残った要素の数を返します。削除された要素の後ろにある要素はシフトされ、配列の最後の要素は新しいサイズの一部になります。

  • nums には、0以上10^4以下の要素が含まれます。
  • 10^4 <= nums[i] <= 10^4
  • nums はソートされています。

解法

この問題は、重複した要素を削除するために、set関数を使用することができます。set関数を使用することで、重複した要素が削除された新しい配列を簡単に作成できます。

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

  1. 配列内の要素をset関数に渡します。
  2. set関数によって重複した要素が削除された新しい配列を取得します。
  3. 元の配列に新しい配列を上書きします。
  4. 新しい配列の長さを返します。

Pythonコード

以下のコードが、「Remove Duplicates from Sorted Array」を解くためのPythonプログラムとなります。

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

def solve(num=0):
    
    solver  = Solution().removeDuplicates
    
    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 removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums[:] = sorted(set(nums))
        return len(nums)

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

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

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

if __name__ == "__main__":

    solve()

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