LeetCodeにおける配列内の消失した数値を見つける方法


方法1: ハッシュマップを使用する方法 この方法では、まず配列内の各数値をハッシュマップに追加します。次に、1から配列の長さまでの範囲で、ハッシュマップに存在しない数値を結果として返します。

def find_disappeared_numbers(nums):
    num_set = set(nums)
    n = len(nums)
    result = []

    for i in range(1, n+1):
        if i not in num_set:
            result.append(i)

    return result

方法2: インデックスを利用する方法 この方法では、配列の各数値をインデックスとして利用します。具体的には、配列内の数値を取り出し、その数値と対応するインデックスの要素をマイナスにします。その後、配列を再度走査し、0より大きい数値に対応するインデックスを結果として返します。

def find_disappeared_numbers(nums):
    n = len(nums)
    result = []

    # マイナスの要素をセット
    for i in range(n):
        index = abs(nums[i]) - 1
        nums[index] = -abs(nums[index])

    # 0より大きい数値のインデックスを結果として返す
    for i in range(n):
        if nums[i] > 0:
            result.append(i+1)

    return result