leetcode——First Missing Positive

题目:

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

For example,

Given [1,2,0] return 3,

and [3,4,-1,1] return 2.

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

方法:

既然是正整数,那么可以考虑将正整数跟下标对应起来存放。正整数不包括0,则下标0存放1,1存放2,以此类推。

从下标0开始,遍历整个数组;

对于下标为i的数cur,若cur在A的范围之内,则寻找A[cur-1],若A[cur-1]!=cur,则记下 tmp = A[cur-1],将A[cur-1]赋值为cur,

然后将cur赋值为tmp,进行下一个循环,直到,cur超出A的范围或者A[cur-1]==cur.(当A[cur-1]==cur时,如果不跳出循环,则会进入死循环)。

跳出循环之后,继续遍历数组剩下的部分,直到遍历结束。

最后,将A从头开始遍历,遇到A[i]!=i+1的时候就是第一个缺失的正整数。

AC代码:

public int firstMissingPositive(int[] A) {
        if(A==null || A.length==0)
            return 1;
        for (int i = 0; i < A.length; i++) {
            int cur = A[i];
            while (cur >= 1 && cur - 1 < A.length) {
                int tmp = A[cur - 1];
                if(A[cur-1]!=cur){
                    A[cur - 1] = cur;
                    cur = tmp;

                }
                else
                    break;
            }
        }

        for(int i=0;i<A.length;i++){
            if(A[i]!=i+1){
                return i+1;
            }
        }
        return A[A.length-1]+1;
    }
时间: 2024-11-03 22:03:31

leetcode——First Missing Positive的相关文章

[leetcode]First Missing Positive

First Missing Positive Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 算法分析: 将1 ~ a.length的数字放到与下标相应

leetcode First Missing Positive hashset简单应用

1 public class Solution { 2 public int firstMissingPositive(int[] A) { 3 HashSet<Integer> hash=new HashSet<Integer>(); 4 int count=0; 5 int sum=0; 6 7 for(int i:A) 8 { 9 if(i>0) 10 { 11 hash.add(i); 12 } 13 } 14 15 int beg=1; 16 while(hash.

[LeetCode] [First Missing Positive 2012-03-08]

Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Leetcode:First Missing Positive 第一个缺失的正数 桶排序

First Missing Positive: Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 题解分析: 如果是T(n)的时间 T(n)的空间,则

LeetCode: First Missing Positive [040]

[题目] Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0] return 3, and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. [题意] 给定一个数组,找出第一个缺失的正数.时间复杂度O(n) [思路] 假设所给数组的

LeetCode: First Missing Positive 解题报告

First Missing Positive Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. SOLUTION 1: 使用类似桶排序的方法: 将值放在它

[LeetCode] First Missing Positive 首个缺失的正数

Given an unsorted integer array, find the first missing positive integer. For example,Given [1,2,0] return 3,and [3,4,-1,1] return 2. Your algorithm should run in O(n) time and uses constant space. 这道题让我们找缺失的首个正数,由于限定了O(n)的时间,所以一般的排序方法都不能用,最开始我没有看到还限

leetcode First Missing Positive python

class Solution(object): def firstMissingPositive(self, nums): """ :type nums: List[int] :rtype: int """ intlen=len(nums) i=0 while i < intlen: if nums[i] > 0 and nums[i] < intlen and nums[i] != nums[nums[i]-1]: #get

leetcode:First Missing Positive分析和实现

题目大意: 传入整数数组nums,求nums中未出现的正整数中的最小值.要求算法在O(n)时间复杂度内实现,并且只能分配常量空间. 分析: 一般碰到这种问题,都先对数组进行排序,再遍历数组就可以找到最小的在nums中没有出现过的正整数.但是由于排序的时间复杂度一般为O(nlog2(n)),因此时间复杂度没有达到要求. 之后再转回排序的方式,有一种排序的方式称为桶排序,只要有足够的空间,就可以在O(n)的时间复杂度内完成排序过程.但事实是只能分配常量空间. 只能分配常量空间还要求时间复杂度为O(n