File tree 4 files changed +136
-72
lines changed
solution/0500-0599/0581.Shortest Unsorted Continuous Subarray
4 files changed +136
-72
lines changed Original file line number Diff line number Diff line change @@ -173,32 +173,20 @@ function findUnsortedSubarray(nums: number[]): number {
173
173
``` rust
174
174
impl Solution {
175
175
pub fn find_unsorted_subarray (nums : Vec <i32 >) -> i32 {
176
- let inf = 1 << 30 ;
177
- let n = nums . len ();
178
- let mut l = - 1 ;
179
- let mut r = - 1 ;
180
- let mut mi = inf ;
181
- let mut mx = - inf ;
182
-
183
- for i in 0 .. n {
184
- if mx > nums [i ] {
185
- r = i as i32 ;
186
- } else {
187
- mx = nums [i ];
188
- }
189
-
190
- if mi < nums [n - i - 1 ] {
191
- l = (n - i - 1 ) as i32 ;
192
- } else {
193
- mi = nums [n - i - 1 ];
194
- }
176
+ let mut arr = nums . clone ();
177
+ arr . sort ();
178
+ let mut l = 0usize ;
179
+ while l < nums . len () && nums [l ] == arr [l ] {
180
+ l += 1 ;
195
181
}
196
-
197
- if r == - 1 {
198
- 0
199
- } else {
200
- r - l + 1
182
+ if l == nums . len () {
183
+ return 0 ;
184
+ }
185
+ let mut r = nums . len () - 1 ;
186
+ while r > l && nums [r ] == arr [r ] {
187
+ r -= 1 ;
201
188
}
189
+ (r - l + 1 ) as i32
202
190
}
203
191
}
204
192
```
@@ -340,6 +328,41 @@ function findUnsortedSubarray(nums: number[]): number {
340
328
}
341
329
```
342
330
331
+ #### Rust
332
+
333
+ ``` rust
334
+ impl Solution {
335
+ pub fn find_unsorted_subarray (nums : Vec <i32 >) -> i32 {
336
+ let inf = 1 << 30 ;
337
+ let n = nums . len ();
338
+ let mut l = - 1 ;
339
+ let mut r = - 1 ;
340
+ let mut mi = inf ;
341
+ let mut mx = - inf ;
342
+
343
+ for i in 0 .. n {
344
+ if mx > nums [i ] {
345
+ r = i as i32 ;
346
+ } else {
347
+ mx = nums [i ];
348
+ }
349
+
350
+ if mi < nums [n - i - 1 ] {
351
+ l = (n - i - 1 ) as i32 ;
352
+ } else {
353
+ mi = nums [n - i - 1 ];
354
+ }
355
+ }
356
+
357
+ if r == - 1 {
358
+ 0
359
+ } else {
360
+ r - l + 1
361
+ }
362
+ }
363
+ }
364
+ ```
365
+
343
366
<!-- tabs: end -->
344
367
345
368
<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -166,32 +166,20 @@ function findUnsortedSubarray(nums: number[]): number {
166
166
``` rust
167
167
impl Solution {
168
168
pub fn find_unsorted_subarray (nums : Vec <i32 >) -> i32 {
169
- let inf = 1 << 30 ;
170
- let n = nums . len ();
171
- let mut l = - 1 ;
172
- let mut r = - 1 ;
173
- let mut mi = inf ;
174
- let mut mx = - inf ;
175
-
176
- for i in 0 .. n {
177
- if mx > nums [i ] {
178
- r = i as i32 ;
179
- } else {
180
- mx = nums [i ];
181
- }
182
-
183
- if mi < nums [n - i - 1 ] {
184
- l = (n - i - 1 ) as i32 ;
185
- } else {
186
- mi = nums [n - i - 1 ];
187
- }
169
+ let mut arr = nums . clone ();
170
+ arr . sort ();
171
+ let mut l = 0usize ;
172
+ while l < nums . len () && nums [l ] == arr [l ] {
173
+ l += 1 ;
188
174
}
189
-
190
- if r == - 1 {
191
- 0
192
- } else {
193
- r - l + 1
175
+ if l == nums . len () {
176
+ return 0 ;
177
+ }
178
+ let mut r = nums . len () - 1 ;
179
+ while r > l && nums [r ] == arr [r ] {
180
+ r -= 1 ;
194
181
}
182
+ (r - l + 1 ) as i32
195
183
}
196
184
}
197
185
```
@@ -333,6 +321,41 @@ function findUnsortedSubarray(nums: number[]): number {
333
321
}
334
322
```
335
323
324
+ #### Rust
325
+
326
+ ``` rust
327
+ impl Solution {
328
+ pub fn find_unsorted_subarray (nums : Vec <i32 >) -> i32 {
329
+ let inf = 1 << 30 ;
330
+ let n = nums . len ();
331
+ let mut l = - 1 ;
332
+ let mut r = - 1 ;
333
+ let mut mi = inf ;
334
+ let mut mx = - inf ;
335
+
336
+ for i in 0 .. n {
337
+ if mx > nums [i ] {
338
+ r = i as i32 ;
339
+ } else {
340
+ mx = nums [i ];
341
+ }
342
+
343
+ if mi < nums [n - i - 1 ] {
344
+ l = (n - i - 1 ) as i32 ;
345
+ } else {
346
+ mi = nums [n - i - 1 ];
347
+ }
348
+ }
349
+
350
+ if r == - 1 {
351
+ 0
352
+ } else {
353
+ r - l + 1
354
+ }
355
+ }
356
+ }
357
+ ```
358
+
336
359
<!-- tabs: end -->
337
360
338
361
<!-- solution: end -->
Original file line number Diff line number Diff line change 1
1
impl Solution {
2
2
pub fn find_unsorted_subarray ( nums : Vec < i32 > ) -> i32 {
3
- let inf = 1 << 30 ;
4
- let n = nums. len ( ) ;
5
- let mut l = -1 ;
6
- let mut r = -1 ;
7
- let mut mi = inf;
8
- let mut mx = -inf;
9
-
10
- for i in 0 ..n {
11
- if mx > nums[ i] {
12
- r = i as i32 ;
13
- } else {
14
- mx = nums[ i] ;
15
- }
16
-
17
- if mi < nums[ n - i - 1 ] {
18
- l = ( n - i - 1 ) as i32 ;
19
- } else {
20
- mi = nums[ n - i - 1 ] ;
21
- }
3
+ let mut arr = nums. clone ( ) ;
4
+ arr. sort ( ) ;
5
+ let mut l = 0usize ;
6
+ while l < nums. len ( ) && nums[ l] == arr[ l] {
7
+ l += 1 ;
22
8
}
23
-
24
- if r == -1 {
25
- 0
26
- } else {
27
- r - l + 1
9
+ if l == nums. len ( ) {
10
+ return 0 ;
28
11
}
12
+ let mut r = nums. len ( ) - 1 ;
13
+ while r > l && nums[ r] == arr[ r] {
14
+ r -= 1 ;
15
+ }
16
+ ( r - l + 1 ) as i32
29
17
}
30
18
}
Original file line number Diff line number Diff line change
1
+ impl Solution {
2
+ pub fn find_unsorted_subarray ( nums : Vec < i32 > ) -> i32 {
3
+ let inf = 1 << 30 ;
4
+ let n = nums. len ( ) ;
5
+ let mut l = -1 ;
6
+ let mut r = -1 ;
7
+ let mut mi = inf;
8
+ let mut mx = -inf;
9
+
10
+ for i in 0 ..n {
11
+ if mx > nums[ i] {
12
+ r = i as i32 ;
13
+ } else {
14
+ mx = nums[ i] ;
15
+ }
16
+
17
+ if mi < nums[ n - i - 1 ] {
18
+ l = ( n - i - 1 ) as i32 ;
19
+ } else {
20
+ mi = nums[ n - i - 1 ] ;
21
+ }
22
+ }
23
+
24
+ if r == -1 {
25
+ 0
26
+ } else {
27
+ r - l + 1
28
+ }
29
+ }
30
+ }
You can’t perform that action at this time.
0 commit comments