美文网首页程序员
力扣 41 缺失的第一个正数

力扣 41 缺失的第一个正数

作者: zhaojinhui | 来源:发表于2020-07-28 11:22 被阅读0次

题意:找到数组中缺失的一个正数

思路:遍历数组,把数放到指定的index上,比如1放到index为0的位置,2放到index为1的位置

思想:利用数组index来解决问题

复杂度:时间O(n),空间O(1)

class Solution {
    public int firstMissingPositive(int[] nums) {
        int len = nums.length;
        for(int i=0;i<len;i++) {
            // 当前数<=0或就是所需的index或比数组长或所需的index已经放了正确的数时跳过
            if(nums[i]<=0 || nums[i] == i+1 || nums[i] >= len || nums[nums[i] - 1] == nums[i])
                continue;
            else {
                int temp = nums[nums[i] - 1];
                nums[nums[i] - 1] = nums[i];
                nums[i] = temp;
                // 交换完的数需要在继续找到它的正确位置
                i--;
            }
        }
        for(int i=0;i<len;i++) {
            if(nums[i] != i+1) {
                return i+1;
            }
        }
        return len+1;
    }
}

相关文章

网友评论

    本文标题:力扣 41 缺失的第一个正数

    本文链接:https://www.haomeiwen.com/subject/yjxfrktx.html