1 minute read

Problem

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 <= 10^4
  • 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

Logic

  1. 0부터 배열 길이까지의 수를 모두 더한 정수를 구한다.

  2. 1번에서 구한 정수에 배열의 각 요소를 전부 뺀다.

  3. 2번 계산 결과를 반환한다.

    Code

    class Solution {
     public int missingNumber(int[] nums) {
         int res = nums.length * (nums.length + 1) / 2;
         for (int i = 0; i < nums.length; i++) res -= nums[i];
         return res;
     }
    }
    

    Time Complexity

    • 배열 nums의 길이를 n이라 가정할 때, 코드의 수행 시간을 지배하는 것은 for반복문의 n번 계산 횟수이다. 따라서 본 솔루션은 O(n)의 시간 복잡도를 가진다.

Categories:

Updated:

Leave a comment