日期:2026年8月4日
LeetCode 題目連結:3731. Find Missing Elements
解題想法
簡單題。題目給一個陣列 $nums$,其中的數字皆不相同,先找出 $nums$ 之中的最小值與最大值,再找出最小值、最大值之間不在 $nums$ 之中的整數,將缺少的整數排序後再回傳,如果沒有缺少的整數則回傳空陣列。我們可以用 Python 的 max、min 或是 C++ 的 max_element、min_element 找出最大值 $high$ 與最小值 $low$。為了標記區間 $[low, high]$ 所有的數字是否在 $nums$ 之中,可以用一個長度為 $high - low + 1$ 陣列 $found$,將 $nums$ 之中所有數字 $num$ 標示為 $found[num - low] = True$。也可以將 $nums$ 轉成 Python 的 set 或是 C++ 的 unordered_set,直接用 in 或是 count 檢查數字是否在 $nums$ 之中。兩者寫法的速度都很快。
Python 程式碼
用串列標記狀態。Runtime: 0 ms, beats 100.00%. Memory: 19.45 MB, beats 18.85%.
class Solution:
def findMissingElements(self, nums: List[int]) -> List[int]:
low, high = min(nums), max(nums) # 最小值、最大值
found = [False] * (high - low + 1) # 是否有這個值
for num in nums: # 更新狀態
found[num - low] = True
ans = [] # 缺少的值
for i in range(low + 1, high):
if not found[i - low]:
ans.append(i)
return ans
用串列標記狀態,合併産生答案的程式碼。Runtime: 0 ms, beats 100.00%. Memory: 19.26 MB, beats 55.74%.
class Solution:
def findMissingElements(self, nums: List[int]) -> List[int]:
low, high = min(nums), max(nums) # 最小值、最大值
found = [False] * (high - low + 1) # 是否有這個值
for num in nums: # 更新狀態
found[num - low] = True
return [i for i in range(low + 1, high) if not found[i - low]]