1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- 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
- }
|