File tree Expand file tree Collapse file tree 4 files changed +136
-72
lines changed
solution/0500-0599/0581.Shortest Unsorted Continuous Subarray Expand file tree Collapse file tree 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 {
173173``` rust
174174impl Solution {
175175 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 ;
195181 }
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 ;
201188 }
189+ (r - l + 1 ) as i32
202190 }
203191}
204192```
@@ -340,6 +328,41 @@ function findUnsortedSubarray(nums: number[]): number {
340328}
341329```
342330
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+
343366<!-- tabs: end -->
344367
345368<!-- solution: end -->
Original file line number Diff line number Diff line change @@ -166,32 +166,20 @@ function findUnsortedSubarray(nums: number[]): number {
166166``` rust
167167impl Solution {
168168 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 ;
188174 }
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 ;
194181 }
182+ (r - l + 1 ) as i32
195183 }
196184}
197185```
@@ -333,6 +321,41 @@ function findUnsortedSubarray(nums: number[]): number {
333321}
334322```
335323
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+
336359<!-- tabs: end -->
337360
338361<!-- solution: end -->
Original file line number Diff line number Diff line change 11impl Solution {
22 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 ;
228 }
23-
24- if r == -1 {
25- 0
26- } else {
27- r - l + 1
9+ if l == nums. len ( ) {
10+ return 0 ;
2811 }
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
2917 }
3018}
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