알고리즘

[LeetCode] Single Number

유병각 2022. 5. 3. 03:05

136. Single Number

방법_#1

시간복잡도 O(nlogn)
공간복잡도 O(1)

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        nums.sort()
        n = len(nums)

        if (n == 1):
            return nums[0]
        idx = 0

        while (idx < n - 1):
            if (nums[idx] != nums[idx + 1]):
                return nums[idx]
            else:
                idx += 2
        return nums[-1]

방법_#2

시간복잡도 O(n)
공간복잡도 O(n)

import collections

class Solution:
    def singleNumber(self, nums: List[int]) -> int:

        dic = collections.Counter(nums)

        for key in dic:
            if (dic[key] == 1):
                return key

방법_#3

시간복잡도 O(n)
공간복잡도 O(n)

import collections

class Solution:
    def singleNumber(self, nums: List[int]) -> int:

        dic = {}

        for num in nums:
            dic[num] = dic.get(num, 0) + 1 # 키가 존재하지 않을 때 해당 key 의 default 값을 0으로 설정해줌

        for key in dic:
            if (dic[key] == 1):
                return key

시간복잡도 O(n)
공간복잡도 O(1)

 

방법_#4

import collections

class Solution:
    def singleNumber(self, nums: List[int]) -> int:

        ret = 0

        for num in nums:
            ret ^= num
        return ret