File tree 1 file changed +31
-6
lines changed
1 file changed +31
-6
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public:
3
+ // O(n)
3
4
int firstMissingPositive (vector<int >& nums) {
5
+ nums.push_back (0 );
4
6
int len = nums.size ();
5
7
if (len == 0 ) return 1 ;
6
8
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
+ }
8
18
9
19
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;
14
22
}
15
23
16
- return (nums[ len- 1 ] < 0 )? 1 : nums[len- 1 ]+ 1 ;
24
+ return len;
17
25
}
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
+ // }
18
43
};
You can’t perform that action at this time.
0 commit comments