标签:
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; };
依旧看看大神的想法:
http://www.cnblogs.com/AnnieKim/archive/2013/04/21/3034631.html
标签:
原文地址:http://www.cnblogs.com/chess/p/5264912.html