268-missing-number

Try it on leetcode

Description

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.

 

Example 1:

Input: nums = [3,0,1]
Output: 2
Explanation: n = 3 since there are 3 numbers, so all numbers are in the range [0,3]. 2 is the missing number in the range since it does not appear in nums.

Example 2:

Input: nums = [0,1]
Output: 2
Explanation: n = 2 since there are 2 numbers, so all numbers are in the range [0,2]. 2 is the missing number in the range since it does not appear in nums.

Example 3:

Input: nums = [9,6,4,2,3,5,7,0,1]
Output: 8
Explanation: n = 9 since there are 9 numbers, so all numbers are in the range [0,9]. 8 is the missing number in the range since it does not appear in nums.

 

Constraints:

  • n == nums.length
  • 1 <= n <= 104
  • 0 <= nums[i] <= n
  • All the numbers of nums are unique.

 

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

Solution(Python)

class Solution:
    def missingNumber(self, nums: List[int]) -> int:
        return self.bitmanipulation(nums)

    # Time Complexity: O(nlogn)
    # Space Complexity: O(1)
    def sorting(self, nums):
        nums.sort()
        for i in range(len(nums)):
            if i != nums[i]:
                return i
        return len(nums)

    # Time Complexity: O(n)
    # Space Complexity: O(n)
    def hashing(self, nums):
        expected_hashmap = set(range(len(nums) + 1))
        actual_hashmap = set(nums)
        for num in expected_hashmap:
            if num not in actual_hashmap:
                return num

    # Time Complexity: O(n)
    # Space Complexity: O(1)
    def summate(self, nums):
        n = len(nums)
        expected_sum = n * (n + 1) // 2
        return expected_sum - sum(nums)

    # Time Complexity: O(n)
    # Space Complexity: O(1)
    def bitmanipulation(self, nums):
        res = 0
        for i in range(1, len(nums) + 1):
            res ^= i
        for num in nums:
            res ^= num
        return res