File tree Expand file tree Collapse file tree 1 file changed +31
-6
lines changed
Expand file tree Collapse file tree 1 file changed +31
-6
lines changed Original file line number Diff line number Diff line change 11class Solution {
22public:
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};
You can’t perform that action at this time.
0 commit comments