1. 程式人生 > >LeetCode.442. 陣列中重複的資料

LeetCode.442. 陣列中重複的資料

給定一個整數陣列 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)