[leetcode-python3] 268. Missing Number

268. Missing Number - python3

Given an array nums containing n distinct numbers in the range [0, n], return the only number in the range that is missing from the array.

Follow up: Could you implement a solution using only O(1) extra space complexity and O(n) runtime complexity?

Answer 1: Accepted (Runtime: 152 ms / Memory Usage: 15.3 MB)

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        sortedNums = sorted(nums)
        for i in range(0, len(sortedNums)):
            if i != sortedNums[i]:
                break
        if i == sortedNums[len(sortedNums)-1]:
            i = i+1
        return i

이렇게 간단하다고~~? 하면서 제출했는데 상당히 느렸던 코드;
무려 19.12% 가 떴다..!
예외처리를 미리 하지 않은 점과 추가메모리(sortedNums)를 사용한 점이 거슬림

Answer 2: Accepted (Runtime: 136 ms / Memory Usage: 15.4 MB)

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        sortedNums = sorted(nums)
        if len(sortedNums)-1 == sortedNums[len(sortedNums)-1]:
            return len(sortedNums)
        for i in range(0, len(sortedNums)):
            if i != sortedNums[i]:
                return i

예외처리를 미리 해주고 return을 바로바로 해주니 35.26% 까지 올라갔다..

Answer 3: Accepted (Runtime: 136 ms / Memory Usage: 15.5 MB)

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        nums.sort()
        if len(nums)-1 == nums[len(nums)-1]:
            return len(nums)
        for i in range(0, len(nums)):
            if i != nums[i]:
                return i

...? 메모리 추가 없이 nums 그대로 썼는데 왜 그대로인거죠..?
오히려 메모리 사용은 0.1MB 늘어남;;

그래서 솔루션을 찾아보니........

Solution Answer 1: (Runtime: 128 ms)

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        n = len(nums)
        expected_sum = n*(n+1)//2
        return expected_sum - sum(nums)

Gauss' Formula를 적용한 거라고 한다
반복문 없이 세줄로 정리한 이 천재같은 코드도 128ms에 64.62%인거 보면 내 136ms도 나쁘진 않은 듯?!

좋은 웹페이지 즐겨찾기