1️. missingNumber(int[] arr)

✔ Example:

  • input :[1,2,4,5]
  • Result → missing = 3

2️. missingNumbersInAnArray(int[] arr)

find multiple missing numbers


package exercise.arrays;

import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.IntStream;

public class MissingNumberInArray {

    public static void main(String[] args) {

        int[] arr = {1, 2, 4, 5, 9, 7, 8, 6};

        // Case 1: Find single missing number (assumes 1..n sequence)
        missingNumber(arr);

        int[] arr2 = {1,6,3,8,9,0};
        // Case 2: Find all missing numbers in range [min, max]
        missingNumbersInAnArray(arr2);
    }

    // Finds ONE missing number (works only if numbers are from 1 to n and exactly one is missing)
    public static void missingNumber(int[] arr) {

        // Total numbers should be length + 1 (since one number is missing)
        int n = arr.length + 1;

        // Sum of first n natural numbers → n * (n + 1) / 2
        int expectedSum = (n * (n + 1)) / 2;

        // Sum of elements present in array
        int actualSum = Arrays.stream(arr).sum();

        // Missing number = expected sum - actual sum
        int missing = expectedSum - actualSum;

        System.out.println("Missing Number is = " + missing);
    }

    // Finds ALL missing numbers between min and max
    public static void missingNumbersInAnArray(int[] arr) {

        // Edge case: null or empty array
        if (arr == null || arr.length == 0) {
            System.out.println("Invalid input");
            return;
        }

        // Find minimum value in array
        int min = Arrays.stream(arr)
                .min()
                .orElseThrow(() -> new IllegalArgumentException("Array is empty"));

        // Find maximum value in array
        int max = Arrays.stream(arr)
                .max()
                .orElseThrow(() -> new IllegalArgumentException("Array is empty"));

        // Convert array into Set for O(1) lookup
        Set<Integer> inputSet = Arrays.stream(arr)
                .boxed()   // convert int → Integer
                .collect(Collectors.toSet());

        // Generate full range from min → max
        // Filter numbers that are NOT present in inputSet
        List<Integer> missingNumbers = IntStream.rangeClosed(min, max)
                .filter(n -> !inputSet.contains(n)) // missing ones
                .boxed()  // convert int → Integer for List
                .toList();

        // Print result
        System.out.println("Missing Numbers: " + missingNumbers);
    }
}

This site uses Just the Docs, a documentation theme for Jekyll.