LeetCode First Missing Positive

原创 2015年07月10日 09:02:04

思路:

要求找到第一个应该属于[1,nums.size()]范围内的正数却又目前不在的。

从头开始,挨个把各个数换到相应地位置,然后再扫一遍数组,看哪一个数不在它应在的位置上。

时间复杂度O(N),空间复杂度O(1)。

class Solution {
private:
    void change(vector<int> &nums) {
        int n = nums.size();
        for(int i = 0; i < nums.size(); ++i) {
            while(nums[i] != i+1) {
                if(nums[i] < 0 || nums[i] > n || nums[i] == nums[nums[i] - 1]) {
                    break;
                }
                swap(nums[i], nums[nums[i] - 1]);
            }
        }
    }
public:
    int firstMissingPositive(vector<int>& nums) {
        change(nums);
        for(int i = 0; i < nums.size(); ++i) {
            if(nums[i] != i+1) {
                return i + 1;
            }
        }
        return nums.size() + 1;
    }
};

java code:

public class Solution {
    public int firstMissingPositive(int[] nums) {
        if(nums == null || nums.length == 0) return 1;

        for(int i = 0; i < nums.length; ++i) {
            while(nums[i] > 0 && nums[i] <= nums.length && nums[i] != i + 1) {
                if(nums[nums[i] - 1] == nums[i]) break;
                swap(nums, i, nums[i] - 1);
            }
        }
        for(int i = 0; i < nums.length; ++i) {
            if(nums[i] != i + 1) return i + 1;
        }
        return nums.length + 1;
    }

    void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

LeetCode | First Missing Positive(第一个缺失的正整数)

Given an unsorted integer array, find the first missing positive integer. For example, Given [1,...
  • a45872055555
  • a45872055555
  • 2014年08月10日 19:35
  • 775

First Missing Positive(在数组中找到第一个丢失的正整数)

Given an unsorted integer array, find the first missing positive integer. For example, Given [1,2,0...
  • cow__sky
  • cow__sky
  • 2014年02月23日 16:25
  • 986

Leetcode刷题记——41. First Missing Positive(第一个丢失的正数)

一、题目叙述: Given an unsorted integer array, find the first missing positive integer. For ...
  • sunshine0_0
  • sunshine0_0
  • 2017年02月22日 21:19
  • 85

HDU1124:Factorial(简单数论)

Factorial Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total ...
  • junior19
  • junior19
  • 2017年01月24日 18:29
  • 68

寻找不在数组中最小的正整数 First Missing Positive

问题:给出一个无序的数组,其中包含有任意的整数。现在要求返回不包含在数组中的最小的正整数。 要求:时间复杂度O(n),空间复杂度O(1)。 思路:如果不要求空间复杂度,可以用hash、map进行统计。...
  • luckyjoy521
  • luckyjoy521
  • 2014年03月08日 20:14
  • 1403

排序、数组——数组中重复的数字和first missing positive(桶排序)

题目:找到数组中不存在的第一个正整数。 For example, Given[1,2,0]return3, and[3,4,-1,1]return2. 要求O(N)时间复杂度,O(1)空间复...
  • jingsuwen1
  • jingsuwen1
  • 2016年05月17日 10:59
  • 207

leetCode 41.First Missing Positive (第一个丢掉的正数) 解题思路和方法

http://www.myexception.cn/operating-system/1961231.html eetCode 41.First Missing Positive (第一...
  • u012768474
  • u012768474
  • 2017年07月28日 19:54
  • 58

[LeetCode(Q41)] First Missing Positive (乱序数组中寻找第一个未出现的正整数)

Q: Given an unsorted integer array, find the first missing positive integer. For example, Giv...
  • suwei19870312
  • suwei19870312
  • 2013年10月09日 16:16
  • 2534

leetCode 41.First Missing Positive (第一个丢失的正数) 解题思路和方法

First Missing Positive  Given an unsorted integer array, find the first missing positive integer....
  • xygy8860
  • xygy8860
  • 2015年07月10日 10:25
  • 1144

Leetcode 372. Super Pow 快速幂计算 解题报告

1 解题思想这道题需要计算 a^b % c 的值,其中b非常的大,大到只能使用数组来表示。这道题是ACM里面常见的快速幂的解题方式,这其中有一个数学的推论,可以看我代码里附带的那个解释。 总之,这...
  • MebiuW
  • MebiuW
  • 2016年07月07日 19:20
  • 6423
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode First Missing Positive
举报原因:
原因补充:

(最多只允许输入30个字)