LeetCode:缺失的第一个正数

题目:

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

示例 1:

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

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

输入: [7,8,9,11,12]
输出: 1

说明:

你的算法的时间复杂度应为O(n),并且只能使用常数级别的空间

我的答案:

第一个想法是先排序,但是时间复杂度达不到,就看到一个想法:

遍历一次数组把大于等于1的和小于数组大小的值放到原数组对应位置,然后再遍历一次数组查当前下标是否和值对应,如果不对应那这个下标就是答案,否则遍历完都没出现那么答案就是数组长度加1。

然后就写了代码:

class Solution {
    public int firstMissingPositive(int[] nums) {
        if(nums==null||nums.length==0){
            return 1;
        }
        int i=0;
        while(i<nums.length){
            if(nums[i]>0&&nums[i]<=nums.length){
                int index = nums[i];
                if(index==nums[index-1]){
                    i++;
                }else{
                    nums[i] = nums[index-1];
                    nums[index-1] = index;
                }
            }else{
                i++;
            }
        }

        for(int j=0;j<nums.length;j++){
            if(nums[j]!=j+1){
                return j+1;
            }
        }
        return nums.length+1;
    }
}

题解:

官方题解:

https://leetcode-cn.com/problems/first-missing-positive/solution/que-shi-de-di-yi-ge-zheng-shu-by-leetcode/

总结:

发布了67 篇原创文章 · 获赞 2 · 访问量 7876

猜你喜欢

转载自blog.csdn.net/wyplj2015/article/details/104819676