41.go 694 B

1234567891011121314151617181920212223242526
  1. package main
  2. func firstMissingPositive(nums []int) int {
  3. n := len(nums) // n nums can only fill 1~n, then n+1 is the answer
  4. // If not, place each number in its right place, the 1st wrong place is the answer
  5. for i := range nums {
  6. for 0 < nums[i] && nums[i] <= n && nums[nums[i]-1] != nums[i] { // Keep swapping untill correct!
  7. nums[i], nums[nums[i]-1] = nums[nums[i]-1], nums[i]
  8. }
  9. }
  10. for i := range nums {
  11. if nums[i] != i+1 {
  12. return i + 1
  13. }
  14. }
  15. return n + 1
  16. }
  17. // func main() {
  18. // n := []int{7, 8, 9, 11, 12}
  19. // println(firstMissingPositive(n))
  20. // n = []int{3, 4, -1, 1}
  21. // println(firstMissingPositive(n))
  22. // n = []int{1, 2, 3}
  23. // println(firstMissingPositive(n))
  24. // }