41. First Missing Positive

一、题目

  1、审题

  2、分析:

    在时间复杂度为 O(n)条件下求出数组中所缺失的最小正整数。

二、解答

  1、思路:

    数组大小为 n, 则所缺失的正整数范围 为 1~n+1;考虑将下标为 i 的位置放入对应大小为 i +1 的元素,则最终遍历时查找下标 i 对应的元素不是 i + 1则为缺失的最小正整数。

class Solution {
    public int firstMissingPositive(int[] nums) {

        // 将 下标为 i 的位置对应放置数字大小为 i+1;
       int len = nums.length;
        for (int i = 0; i < len; i++) {
            while(nums[i] > 0 && nums[i] <= len
                    && nums[nums[i] - 1] != nums[i]) {
                swap(nums, i, nums[i] - 1);
            }
        }

    // 查找
for (int i = 0; i < len; i++) { if(nums[i] != i + 1) return i + 1; } return len + 1; } private void swap(int[] nums, int i, int j) { int tmp = nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }
原文地址:https://www.cnblogs.com/skillking/p/9581439.html