LeetCode.442. 陣列中重複的資料
阿新 • • 發佈:2018-12-11
給定一個整數陣列 a,其中1 ≤ a[i] ≤ n (n為陣列長度), 其中有些元素出現兩次而其他元素出現一次。
找到所有出現兩次的元素。
你可以不用到任何額外空間並在O(n)時間複雜度內解決這個問題嗎?
示例:
輸入: [4,3,2,7,8,2,3,1]
輸出: [2,3]
思路:
類似448.取出每個數字的絕對值x,檢查索引為x-1位的數字,若此數字已經為負,則這是x第二次被訪問,將其加入返回數列,若此數字還是正,則這是x第一次訪問,將索引為x-1位的數字取負。
程式碼:
class Solution: def findDuplicates(self, nums): """ :type nums: List[int] :rtype: List[int] """ returnlist=[] for x in nums: if nums[abs(x)-1]<0: returnlist.append(abs(x)) else: nums[abs(x)-1]*=-1 return returnlist
分析:
時間複雜度O(N),空間複雜度O(0)