題目
難度:★☆☆☆☆
類型:數(shù)組
集合 S 包含從1到 n 的整數(shù)。不幸的是,因?yàn)閿?shù)據(jù)錯(cuò)誤,導(dǎo)致集合里面某一個(gè)元素復(fù)制了成了集合里面的另外一個(gè)元素的值,導(dǎo)致集合丟失了一個(gè)整數(shù)并且有一個(gè)元素重復(fù)。
給定一個(gè)數(shù)組 nums 代表了集合 S 發(fā)生錯(cuò)誤后的結(jié)果。你的任務(wù)是首先尋找到重復(fù)出現(xiàn)的整數(shù),再找到丟失的整數(shù),將它們以數(shù)組的形式返回。
注意
給定數(shù)組的長度范圍是 [2, 10000]。
給定的數(shù)組是無序的。
示例
輸入: nums = [1,2,2,4]
輸出: [2,3]
解答
我們可以分別求取重復(fù)的元素和缺失的元素,這里由于只有一個(gè)重復(fù)元素,我們可以將輸入數(shù)組之和與去重后數(shù)組之和做差求取重復(fù)元素,對于缺失元素,我們可以將補(bǔ)全后的集合與去重后的集合做差求取。
class Solution:
def findErrorNums(self, nums: list) -> list:
nums_set = set(nums) # 獲得輸入數(shù)組的集合
repeat = sum(nums) - sum(nums_set) # 求和相減即為重復(fù)
correct_set = set(range(1, len(nums)+1)) # 理想情況下的數(shù)組
defect = correct_set - nums_set # 集合相減即為缺失
return [repeat, defect.pop()] # 返回結(jié)果
如有疑問或建議,歡迎評論區(qū)留言~