Skip to content
On this page

41. First Missing Positive share

Problem Statement

Given an unsorted integer array nums, return the smallest missing positive integer.

You must implement an algorithm that runs in O(n) time and uses O(1) auxiliary space.

 

Example 1:

Input: nums = [1,2,0]
Output: 3
Explanation: The numbers in the range [1,2] are all in the array.

Example 2:

Input: nums = [3,4,-1,1]
Output: 2
Explanation: 1 is in the array but 2 is missing.

Example 3:

Input: nums = [7,8,9,11,12]
Output: 1
Explanation: The smallest positive integer 1 is missing.

 

Constraints:

  • 1 <= nums.length <= 105
  • -231 <= nums[i] <= 231 - 1
Click to open Hints
  • Think about how you would solve the problem in non-constant space. Can you apply that logic to the existing space?
  • We don't care about duplicates or non-positive integers
  • Remember that O(2n) = O(n)

Solution:

go
package main

func firstMissingPositive(nums []int) int {
	i := 0

	for i < len(nums) {
		if nums[i] > 0 && nums[i] <= len(nums) && nums[nums[i]-1] != nums[i] {
			nums[nums[i]-1], nums[i] = nums[i], nums[nums[i]-1]
		} else {
			i++
		}
	}

	for i, num := range nums {
		if num != i+1 {
			return i + 1
		}
	}

	return len(nums) + 1
}

rs
impl Solution {
    pub fn first_missing_positive(nums: Vec<i32>) -> i32 {
        let (mut nums, mut i) = (nums, 0);

        while i < nums.len() {
            let num = nums[i];

            // if the number is in the range [1, nums.len()] and not in the right position
            // swap it with the number at the right position
            if num > 0 && num <= nums.len() as i32 && num != nums[num as usize - 1] {
                nums.swap(i, num as usize - 1);
            } else {
                i += 1;
            }
        }

        // find the first missing positive number
        for (i, num) in nums.iter().enumerate() {
            if num != &(i as i32 + 1) {
                return i as i32 + 1;
            }
        }

        nums.len() as i32 + 1
    }
}

...


Released under the MIT License.