思路:做法很多,只考慮空間o(1
)o(1)
o(1)
的方法。設答案為a、b
a、ba、
b,陣列的異或和為sum
sumsu
m,再對所有的1
<=i
<=n
1<=i<=n
1<=i
<=n
做一遍sum
xori
sum\ xor\ i
sumxor
i,得到的結果就是axo
rba\ xor\ b
axor
b,現在考慮怎麼把他們分離出來。我們找到axo
rba\ xor\ b
axor
b的為1
11的最低位,然後依據此位把原陣列和[1,
n][1,n]
[1,n
]分成兩個部分,每個部分單獨做一次異或和就可以得到a、b
a、ba、
b了,現在只需要考慮它們的順序問題,顯然遍歷一遍陣列即可。
class
solution
vector<
int> ans
;for
(int i=
0;ireturn ans;}}
;
從零開始刷力扣(五) 645 錯誤的集合
題目描述 集合s包含從1到n的整數。不幸的是,因為資料錯誤,導致集合裡面某乙個元素複製了成了集合裡面的另外乙個元素的值,導致集合丟失了乙個整數並且有乙個元素重複 給定乙個陣列nums代表了集合s發生錯誤後的結果。你的任務是首先尋找到重複出現的整數,再找到丟失的整數,將它們以陣列的形式返回。示例1 輸...
645 錯誤的集合
鏈結 集合 s 包含從1到 n 的整數。不幸的是,因為資料錯誤,導致集合裡面某乙個元素複製了成了集合裡面的另外乙個元素的值,導致集合丟失了乙個整數並且有乙個元素重複。給定乙個陣列 nums 代表了集合 s 發生錯誤後的結果。你的任務是首先尋找到重複出現的整數,再找到丟失的整數,將它們以陣列的形式返回...
645 錯誤的集合
集合 s 包含從1到 n 的整數。不幸的是,因為資料錯誤,導致集合裡面某乙個元素複製了成了集合裡面的另外乙個元素的值,導致集合丟失了乙個整數並且有乙個元素重複。給定乙個陣列 nums 代表了集合 s 發生錯誤後的結果。你的任務是首先尋找到重複出現的整數,再找到丟失的整數,將它們以陣列的形式返回。示例...