码迷,mamicode.com
首页 > 其他好文 > 详细

First Missing Positive

时间:2015-11-28 22:58:20      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

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.

如果数组中的数是按照数该在的位置摆放(数i摆放在数组i的位置),那么很容易就能获得第一个缺失的正数。

所以我们先调整数组数的位置,令下标为i的位置存放数i。

再遍历一遍数组,如果nums[i]!=i,说明该位置的数缺失。

class Solution {
public:
    int firstMissingPositive(vector<int>& nums) {
        int numsSize = nums.size();
        if(numsSize==0 ){
            return 1;
        }
        for(int i=0;i<numsSize;i++){
            while(nums[i] != i){//如果下标i的位置存放的数不是i,则把nums[i]放在下标为nums[i]的位置
                if(nums[i]>=numsSize || nums[i]<=0 || nums[i] == nums[nums[i]]){//如果是负数或者大于numsSize的数,则位置不变
                    break;
                }
                swap(nums[i],nums[nums[i]]);
            }
        }
        for(int i=1;i<numsSize;i++){
            if(i!=nums[i]){
                return i;
            }
        }
        return nums[0]==numsSize? numsSize+1 : numsSize;
    }
};

 

First Missing Positive

标签:

原文地址:http://www.cnblogs.com/zengzy/p/5003501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!