41. First Missing Positive

Given an unsorted integer array, find the smallest missing positive integer.

Example 1:

Input: [1,2,0]
Output: 3

Example 2:

Input: [3,4,-1,1]
Output: 2

Example 3:

Input: [7,8,9,11,12]
Output: 1

Note:

Your algorithm should run in O(n) time and uses constant extra space.

Solution

(1) Java

class Solution {
    public int firstMissingPositive(int[] nums) {
        for (int i = 0; i < nums.length; i++) {
            int num = nums[i];
            if (num == 0) {
                continue;
            }
            if (num > nums.length || num < 0) {
                nums[i] = 0;
            } else if (num == i+1) {
                continue;
            }else {
                nums[i] = 0;
                while (true) {
                    int tmp = nums[num-1];
                    if (tmp == num) {
                        break;
                    }
                    nums[num-1] = num;
                    if (tmp <= 0 || tmp > nums.length) {
                        break;
                    } else {
                        num = tmp;
                    }
                }
            }
        }
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == 0) {
                return i+1;
            }
        }
        return nums.length+1;
    }
}

(2) Python

class Solution:
    def firstMissingPositive(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if not nums:
            return 1
        for i in range(len(nums)):
            num = nums[i]
            while num > 0 and num <= len(nums) and nums[num-1] != num:
                tmp = nums[num-1]
                nums[num-1] = num
                num = tmp
        for i in range(len(nums)):
            if nums[i] != i+1:
                return i+1
        return len(nums)+1

(3) Scala



results matching ""

    No results matching ""