方法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