LeetCode 41 First Missing Positive

题目描述

Given an unsorted integer array nums, find the smallest missing positive integer.
You must implement an algorithm that runs in O(n) time and uses constant extra space.

给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。

请你实现时间复杂度为 O(n) 并且只使用常数级别额外空间的解决方案。

示例 1
输入:nums = [1,2,0]
输出:3

示例 2
输入:nums = [3,4,-1,1]
输出:2
示例 3:

示例 3:
输入:nums = [7,8,9,11,12]
输出:1

分析

待完成

Codes

class Solution {
    public int firstMissingPositive(int[] nums) {
        if (nums.length == 0) {
            return 1;
        }
        for (int i = 0; i < nums.length; i++) {
            // 这里一定是while不是if,如果是if的话会导致i上放的数与规则不一致
            // 例如:3, 4, -1, 1 => -1, 4, 3, 1 => 3, 1, -1, 4 如果是if那么下一次i=2,此时i=1位置上的值是错误的
            while (nums[i] > 0 && nums[i] <= nums.length && nums[nums[i] - 1] != nums[i]) {
                int temp = nums[nums[i] - 1];
                nums[nums[i] - 1] = nums[i];
                nums[i] = temp;
            }
        }
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != i + 1) {
                return i + 1;
            }
        }
        return nums.length + 1;
    }
}
上一篇:Vue作用域插槽实战例子/使用场景


下一篇:ISO14229:2013 之 通过标志输入输出控制InputOutputControlByIdentifier (0x2F)