leetcode/
first_missing_positive.rs1pub struct Solution;
33
34impl Solution {
35 pub fn first_missing_positive(nums: Vec<i32>) -> i32 {
36 let mut nums = nums;
37 let len = nums.len() as i32;
38 for i in 0..nums.len() {
39 while nums[i] > 0 && nums[i] <= len && nums[nums[i] as usize - 1] != nums[i] {
40 let v = nums[i] as usize - 1;
41 nums.swap(i, v);
42 }
43 }
44
45 for i in 0..nums.len() {
46 if nums[i] != i as i32 + 1 {
47 return i as i32 + 1;
48 }
49 }
50 return len + 1;
51 }
52}
53
54#[cfg(test)]
55mod tests {
56 use super::*;
57
58 #[test]
59 fn test() {
60 let t = |n| Solution::first_missing_positive(n);
61 assert_eq!(3, t(vec![1,2,0]));
62 assert_eq!(2, t(vec![3,4,-1,1]));
63 assert_eq!(1, t(vec![7,8,9,11,12]));
64 assert_eq!(6, t(vec![1,2,3,4,5]));
65 }
66}