LeetCode - 442 解題紀錄 / August LeetCoding Challenge Day 6
題目: LeetCode - 442. Find All Duplicates in an Array
題目說明
給一個陣列 nums
,1 ≤ nums[i] ≤ n
。求此陣列中出現兩次的數字。
※ 題目希望時間複雜度為 O(n),且不使用額外的空間。
解題思路
由於有 1 ≤ nums[i] ≤ n
這個條件,所以我們可以使用陣列元素的正負來判斷此數字是否出現過。具體作法為使用一個迴圈遍歷陣列,我們先判斷 nums[abs(nums[i]) - 1]
是否為負數,若為負數代表前面出現過,否則將 nums[abs(nums[i]) - 1]
設為負數。
※ 使用 abs()
是為了避免這個元素已經被設為負數,減一是因為 nums[i]
的範圍為 [1, n]。
參考解法
1 | // fast IO |
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Larry's notes!
評論