[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도 나쁘진 않은 듯?!
Author And Source
이 문제에 관하여([leetcode-python3] 268. Missing Number), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jsh5408/leetcode-python3-268.-Missing-Number저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)