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?
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)를 사용한 점이 거슬림
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% 까지 올라갔다..
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 늘어남;;
그래서 솔루션을 찾아보니........
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도 나쁘진 않은 듯?!