55
55
56
56
<!-- 这里可写通用的实现逻辑 -->
57
57
58
- 将排序后的数组与原数组进行比较,确定左右边界。更进一步优化,可以通过维护最大值和最小值,一次遍历得出结果(见 Golang 解法)
58
+ ** 方法一:排序**
59
+
60
+ 将排序后的数组与原数组进行比较,确定左右边界。
61
+
62
+ 时间复杂度 $O(nlogn)$,其中 $n$ 表示 $nums$ 数组的长度。
63
+
64
+ 更进一步优化,可以通过维护最大值和最小值,一次遍历得出结果(见 Golang 解法)
59
65
60
66
<!-- tabs:start -->
61
67
66
72
``` python
67
73
class Solution :
68
74
def findUnsortedSubarray (self , nums : List[int ]) -> int :
69
- n = len (nums)
70
- numsSorted = sorted (nums)
71
- left, right = 0 , n - 1
72
- while left < n and nums[left] == numsSorted[left]:
75
+ arr = sorted (nums)
76
+ left, right = 0 , len (nums) - 1
77
+ while left <= right and nums[left] == arr[left]:
73
78
left += 1
74
- while right >= 0 and nums[right] == numsSorted [right]:
79
+ while left <= right and nums[right] == arr [right]:
75
80
right -= 1
76
- return 0 if right == - 1 else right - left + 1
81
+ return right - left + 1
77
82
```
78
83
79
84
### ** Java**
@@ -83,24 +88,55 @@ class Solution:
83
88
``` java
84
89
class Solution {
85
90
public int findUnsortedSubarray (int [] nums ) {
86
- int n = nums. length;
87
- int [] numsSorted = new int [n];
88
- System . arraycopy(nums, 0 , numsSorted, 0 , n);
89
- Arrays . sort(numsSorted);
90
- int left = 0 , right = n - 1 ;
91
- while (left < n && nums[left] == numsSorted[left]) {
92
- left++ ;
91
+ int [] arr = nums. clone();
92
+ Arrays . sort(arr);
93
+ int left = 0 , right = nums. length - 1 ;
94
+ while (left <= right && nums[left] == arr[left]) {
95
+ ++ left;
93
96
}
94
- while (right >= 0 && nums[right] == numsSorted [right]) {
95
- right -- ;
97
+ while (left <= right && nums[right] == arr [right]) {
98
+ -- right ;
96
99
}
97
- return right == - 1 ? 0 : right - left + 1 ;
100
+ return right - left + 1 ;
98
101
}
99
102
}
100
103
```
101
104
105
+ ### ** C++**
106
+
107
+ ``` cpp
108
+ class Solution {
109
+ public:
110
+ int findUnsortedSubarray(vector<int >& nums) {
111
+ vector<int > arr = nums;
112
+ sort(arr.begin(), arr.end());
113
+ int left = 0, right = arr.size() - 1;
114
+ while (left <= right && nums[ left] == arr[ left] ) ++left;
115
+ while (left <= right && nums[ right] == arr[ right] ) --right;
116
+ return right - left + 1;
117
+ }
118
+ };
119
+ ```
120
+
102
121
### **Go**
103
122
123
+ ```go
124
+ func findUnsortedSubarray(nums []int) int {
125
+ n := len(nums)
126
+ arr := make([]int, n)
127
+ copy(arr, nums)
128
+ sort.Ints(arr)
129
+ left, right := 0, n-1
130
+ for left <= right && nums[left] == arr[left] {
131
+ left++
132
+ }
133
+ for left <= right && nums[right] == arr[right] {
134
+ right--
135
+ }
136
+ return right - left + 1
137
+ }
138
+ ```
139
+
104
140
``` go
105
141
func findUnsortedSubarray (nums []int ) int {
106
142
n := len (nums)
0 commit comments