Skip to content

Commit 979594a

Browse files
committed
Feb 1 updated solution
1 parent 46dbf5d commit 979594a

File tree

1 file changed

+31
-6
lines changed

1 file changed

+31
-6
lines changed

41-FirstMissingPositive.cpp

+31-6
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,43 @@
11
class Solution {
22
public:
3+
// O(n)
34
int firstMissingPositive(vector<int>& nums) {
5+
nums.push_back(0);
46
int len = nums.size();
57
if(len == 0) return 1;
68

7-
sort(nums.begin(), nums.end());
9+
// sort(nums.begin(), nums.end());
10+
int i = 0;
11+
while(i < len){
12+
if( (nums[i] < 0 || nums[i] >= len) || (nums[i] == nums[nums[i]]) ){
13+
i++;
14+
} else {
15+
swap(nums[i], nums[nums[i]]);
16+
}
17+
}
818

919
int answer = 0;
10-
for(int i = 0; i < len; i++){
11-
if(nums[i] < 0 || nums[i] == answer) continue;
12-
if(nums[i] == answer+1) answer = nums[i];
13-
else return answer+1;
20+
for( i = 1; i < len; i++){
21+
if(i != nums[i]) return i;
1422
}
1523

16-
return (nums[len-1] < 0)? 1: nums[len-1]+1;
24+
return len;
1725
}
26+
27+
// O(n log n) solution
28+
// int firstMissingPositive(vector<int>& nums) {
29+
// int len = nums.size();
30+
// if(len == 0) return 1;
31+
//
32+
// sort(nums.begin(), nums.end());
33+
//
34+
// int answer = 0;
35+
// for(int i = 0; i < len; i++){
36+
// if(nums[i] < 0 || nums[i] == answer) continue;
37+
// if(nums[i] == answer+1) answer = nums[i];
38+
// else return answer+1;
39+
// }
40+
//
41+
// return (nums[len-1] < 0)? 1: nums[len-1]+1;
42+
// }
1843
};

0 commit comments

Comments
 (0)