diff --git a/0268.Missing-Number/memo.md b/0268.Missing-Number/memo.md new file mode 100644 index 0000000..db2df13 --- /dev/null +++ b/0268.Missing-Number/memo.md @@ -0,0 +1,24 @@ +# 268. Missing Number + +## step1 +sortする解法: 時間 O(nlogn) 空間 O(n) +setを用いる: 時間 O(n) 空間 O(n) +和を用いる: 時間 O(n) 空間 O(1) + +> Follow up: Could you implement a solution using only O(1) extra space complexity and O(n) runtime complexity? + +最後のが答えか? + +## 他の人のコード + +https://leetcode.com/problems/missing-number/solutions/8334452/video-gauss-sum-and-bitwise-xor-by-abstr-pi85/ + +xorを使った解法。なるほど。これは覚えておきたい。 + +https://github.com/Kitaken0107/GrindEasy/pull/20 + +https://github.com/Nbotter/leetcode/pull/3/changes + +## step2 +sort解法の改善とxorの解法 + diff --git a/0268.Missing-Number/step1_set.py b/0268.Missing-Number/step1_set.py new file mode 100644 index 0000000..8457e55 --- /dev/null +++ b/0268.Missing-Number/step1_set.py @@ -0,0 +1,8 @@ +class Solution: + def missingNumber(self, nums: List[int]) -> int: + num_set = set(nums) + for i in range(len(nums)+1): + if i not in num_set: + return i + + diff --git a/0268.Missing-Number/step1_sort.py b/0268.Missing-Number/step1_sort.py new file mode 100644 index 0000000..53b33ab --- /dev/null +++ b/0268.Missing-Number/step1_sort.py @@ -0,0 +1,10 @@ +class Solution: + def missingNumber(self, nums: List[int]) -> int: + sorted_nums = sorted(nums) + expected = 0 + for i in range(len(sorted_nums)): + if sorted_nums[i] != expected: + break + expected += 1 + + return expected diff --git a/0268.Missing-Number/step1_sum.py b/0268.Missing-Number/step1_sum.py new file mode 100644 index 0000000..33c84e7 --- /dev/null +++ b/0268.Missing-Number/step1_sum.py @@ -0,0 +1,3 @@ +class Solution: + def missingNumber(self, nums: List[int]) -> int: + return (len(nums)+1) * len(nums) // 2 - sum(nums) diff --git a/0268.Missing-Number/step2_sort.py b/0268.Missing-Number/step2_sort.py new file mode 100644 index 0000000..2bf8308 --- /dev/null +++ b/0268.Missing-Number/step2_sort.py @@ -0,0 +1,9 @@ +class Solution: + def missingNumber(self, nums: List[int]) -> int: + sorted_nums = sorted(nums) + expected = 0 + for expected, actual in enumerate(sorted_nums): + if expected != actual: + return expected + + return len(nums) diff --git a/0268.Missing-Number/step2_xor.py b/0268.Missing-Number/step2_xor.py new file mode 100644 index 0000000..7d96288 --- /dev/null +++ b/0268.Missing-Number/step2_xor.py @@ -0,0 +1,9 @@ +class Solution: + def missingNumber(self, nums: List[int]) -> int: + xor_sum = 0 + for actual in nums: + xor_sum ^= actual + for expected in range(len(nums)+1): + xor_sum ^= expected + + return xor_sum