diff --git a/algorithms/cpp/first_missing_positive.cpp b/algorithms/cpp/first_missing_positive.cpp new file mode 100644 index 00000000..27e6de61 --- /dev/null +++ b/algorithms/cpp/first_missing_positive.cpp @@ -0,0 +1,37 @@ +// problem : https://leetcode.com/problems/first-missing-positive/ + +class Solution { +public: + int firstMissingPositive(vector<int>& nums) { + long int l = nums.size(); + if(l==0) + return 1; + if(l==1) + return nums[0]==1?2:1; + long int f=0,i; + for( i=0;i<l;i++) + { + if(nums[i]<=0) + { + long int v= nums[i]; + nums[i]=nums[f]; + nums[f]=v; + f++; + } + } + long int st=f; + cout<<f<<" "; + for(int i=f;i<l;i++) + { + long int in = abs(nums[i])-1+st; + cout<<in<<" "; + if(in<l&&nums[in]>=0) + nums[in]=-nums[in]; + } + + for(int i=st;i<l;i++) + if(nums[i]>=0) + return i+1-st; + return l+1-st; + } +};