func findUnsortedSubarray(nums []int) int { i, j, max, min := 0, -1, nums[0], nums[len(nums)-1] for l, r := 0, len(nums)-1; 0 <= r; l, r = l+1, r-1 { max = maxInt(max, nums[l]) min = minInt(min, nums[r]) if nums[l] != max { j = l // The last num that < max } if nums[r] != min { i = r // The last num that > min } } return j - i + 1 } func maxInt(x, y int) int { if x < y { return y } return x } func minInt(x, y int) int { if x < y { return x } return y } func findUnsortedSubarraySort(nums []int) int { n := len(nums) sorted := make([]int, n) copy(sorted, nums) sort.Ints(sorted) l, r := 0, n-1 for ; l < n && nums[l] == sorted[l]; l++ { } if l == n { return 0 } for ; nums[r] == sorted[r]; r-- { } return r - l + 1 }