Algorithm
Problem Name: 41. First Missing Positive
Given an unsorted integer array nums
, return the smallest missing positive integer.
You must implement an algorithm that runs in O(n)
time and uses constant extra space.
Example 1:
Input: nums = [1,2,0] Output: 3 Explanation: The numbers in the range [1,2] are all in the array.
Example 2:
Input: nums = [3,4,-1,1] Output: 2 Explanation: 1 is in the array but 2 is missing.
Example 3:
Input: nums = [7,8,9,11,12] Output: 1 Explanation: The smallest positive integer 1 is missing.
Constraints:
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
Code Examples
#1 Code Example with C Programming
Code -
C Programming
int firstMissingPositive(int* nums, int numsSize) {
int i, k, t;
for (i = 0; i < numsSize; i ++) {
k = nums[i];
while (k > 0 && k < numsSize && k != nums[k - 1]) {
nums[i] = nums[k - 1];
nums[k - 1] = k;
k = nums[i];
}
}
for (i = 0; i < numsSize; i ++) {
if (nums[i] != i + 1) break;
}
return i + 1;
}
Copy The Code &
Try With Live Editor
Input
Output
#2 Code Example with C++ Programming
Code -
C++ Programming
class Solution {
public:
int firstMissingPositive(vector<int>& nums) {
sort(nums.begin(), nums.end());
int i = 1;
for(int x: nums) if(x == i) i++;
return i;
}
};
Copy The Code &
Try With Live Editor
Input
Output
#3 Code Example with Java Programming
Code -
Java Programming
class Solution {
public int firstMissingPositive(int[] nums) {
int n = nums.length;
int idx = 0;
while (idx < n) {
if (nums[idx] > 0 && nums[idx] < n && nums[nums[idx]] != nums[idx]) {
swap(nums, idx, nums[idx]);
}
else {
idx++;
}
}
idx = 1;
while (idx < n && nums[idx] == idx) {
idx++;
}
if (n == 0 || idx < n) {
return idx;
}
return nums[0] == idx ? idx + 1 : idx;
}
private void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
}
Copy The Code &
Try With Live Editor
Input
Output
#4 Code Example with Javascript Programming
Code -
Javascript Programming
const firstMissingPositive = function(nums) {
if(nums.length === 0) return 1
const arr = []
let max = Number.MIN_SAFE_INTEGER
for(let i = 0, len = nums.length; i < len; i++> {
if(nums[i] > 0) arr[nums[i]] = nums[i]
if(nums[i] > max) max = nums[i]
}
for(let i = 1; i < max; i++) {
if(arr[i] == null> return i
}
return max < 0 ? 1 : max + 1
};
Copy The Code &
Try With Live Editor
Input
Output
#5 Code Example with Python Programming
Code -
Python Programming
class Solution:
def firstMissingPositive(self, nums: List[int], res: int = 1) -> int:
for num in sorted(nums):
res += num == res
return res
Copy The Code &
Try With Live Editor
Input
Output
#6 Code Example with C# Programming
Code -
C# Programming
namespace LeetCode
{
public class _041_FirstMissingPositive
{
public int FirstMissingPositive(int[] nums)
{
int i, temp;
for (i = 0; i < nums.Length; i++)
{
temp = nums[i];
while (temp > 0 && temp < nums.Length && nums[temp - 1] != temp)
{
nums[i] = nums[temp - 1];
nums[temp - 1] = temp;
temp = nums[i];
}
}
for (i = 0; i < nums.Length; i++)
{
if (nums[i] != i + 1) { break; }
}
return i + 1;
}
}
}
Copy The Code &
Try With Live Editor
Input
Output