581.shortest-unsorted-continuous-subarray.go 769 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. func findUnsortedSubarray(nums []int) int {
  2. i, j, max, min := 0, -1, nums[0], nums[len(nums)-1]
  3. for l, r := 0, len(nums)-1; 0 <= r; l, r = l+1, r-1 {
  4. max = maxInt(max, nums[l])
  5. min = minInt(min, nums[r])
  6. if nums[l] != max {
  7. j = l // The last num that < max
  8. }
  9. if nums[r] != min {
  10. i = r // The last num that > min
  11. }
  12. }
  13. return j - i + 1
  14. }
  15. func maxInt(x, y int) int {
  16. if x < y {
  17. return y
  18. }
  19. return x
  20. }
  21. func minInt(x, y int) int {
  22. if x < y {
  23. return x
  24. }
  25. return y
  26. }
  27. func findUnsortedSubarraySort(nums []int) int {
  28. n := len(nums)
  29. sorted := make([]int, n)
  30. copy(sorted, nums)
  31. sort.Ints(sorted)
  32. l, r := 0, n-1
  33. for ; l < n && nums[l] == sorted[l]; l++ {
  34. }
  35. if l == n {
  36. return 0
  37. }
  38. for ; nums[r] == sorted[r]; r-- {
  39. }
  40. return r - l + 1
  41. }