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

First Missing Positive

时间:2016-03-11 12:17:55      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

https://leetcode.com/problems/first-missing-positive/

我原以为数组中不会有重复的数字,所以利用min、max分别记录给定数组中出现的最小正整数和最大正整数{可以求出这之间的所有数值之和sum2=(min+max)*(max-min+1)/2},并且遍历给定数组,将所有正整数求和计入sum1。如果sum1>sum2则,sum1-sum2为中断数字,否则说明【min,max】连续,max+1即为所求。接着处理一些边界条件接好。但,太天真了(不过这种思路对于不含重复元素的数组仍然还是不错的思路),看看这种思路的代码实现:

技术分享
class Solution {
public:
    Solution():res(1){
    }
    int firstMissingPositive(vector<int>& nums) {
        if(nums.size()==0)
            return res;
        int min=0,max=0;
        int sum=0;
        for(int i=0;i<nums.size();i++)
            if(nums[i]>0){
                min=max=nums[i];
                break;
            }
        for(int i=0;i<nums.size();i++){
            if(nums[i]>0){
                if(nums[i]<min)
                    min=nums[i];
                if(nums[i]>max)
                    max=nums[i];
                sum+=nums[i];
            }
        }
        res=(max-min+1)*(min+max)/2-sum;
        if(res==0)//说明数字连续,没有中断,缺失最后一个未出来的正整数
            res=max+1;
        if(min!=1)
            res=1;
        return res;
    }
private:
    int res;
};
View Code

依旧看看大神的想法:

http://www.cnblogs.com/AnnieKim/archive/2013/04/21/3034631.html

 

First Missing Positive

标签:

原文地址:http://www.cnblogs.com/chess/p/5264912.html

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