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 O(1)
auxiliary space.
Input: nums = [1,2,0] Output: 3 Explanation: The numbers in the range [1,2] are all in the array.
Input: nums = [3,4,-1,1] Output: 2 Explanation: 1 is in the array but 2 is missing.
Input: nums = [7,8,9,11,12] Output: 1 Explanation: The smallest positive integer 1 is missing.
1 <= nums.length <= 105
-231 <= nums[i] <= 231 - 1
impl Solution {
pub fn first_missing_positive(mut nums: Vec<i32>) -> i32 {
nums.push(0);
for i in 0..nums.len() {
while nums[i] >= 0 && nums[i] < nums.len() as i32 && nums[nums[i] as usize] != nums[i] {
let tmp = nums[i] as usize;
nums.swap(tmp, i);
}
}
for i in 1..nums.len() {
if i as i32 != nums[i] {
return i as i32;
}
}
nums.len() as i32
}
}