forked from rubythonode/javascript-problems-and-solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfirst-missing-positive.js
More file actions
49 lines (43 loc) · 775 Bytes
/
first-missing-positive.js
File metadata and controls
49 lines (43 loc) · 775 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
/**
* First Missing Positive
*
* Given an unsorted integer array, find the smallest missing positive integer.
*
* Example 1:
*
* Input: [1,2,0]
* Output: 3
*
* Example 2:
*
* Input: [3,4,-1,1]
* Output: 2
*
* Example 3:
*
* Input: [7,8,9,11,12]
* Output: 1
*
* Note:
*
* Your algorithm should run in O(n) time and uses constant extra space.
*/
/**
* @param {number[]} A
* @return {number}
*/
const firstMissingPositive = A => {
const n = A.length;
let i = 0;
while (i < n) {
if (A[i] > 0 && A[i] <= n && A[i] !== A[A[i] - 1]) swap(A, i, A[i] - 1);
else i++;
}
i = 0;
while (i < n && A[i] === i + 1) {
i++;
}
return i + 1;
};
const swap = (A, i, j) => ([A[i], A[j]] = [A[j], A[i]]);
export { firstMissingPositive };