Skip to content

Commit 49fea5c

Browse files
authored
feat: add rust solution to lc problem: No.0581 (#4414)
No.0581.Shortest Unsorted Continuous Subarray
1 parent 070dbb6 commit 49fea5c

File tree

4 files changed

+136
-72
lines changed

4 files changed

+136
-72
lines changed

solution/0500-0599/0581.Shortest Unsorted Continuous Subarray/README.md

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -173,32 +173,20 @@ function findUnsortedSubarray(nums: number[]): number {
173173
```rust
174174
impl 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 -->

solution/0500-0599/0581.Shortest Unsorted Continuous Subarray/README_EN.md

Lines changed: 47 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -166,32 +166,20 @@ function findUnsortedSubarray(nums: number[]): number {
166166
```rust
167167
impl 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 -->
Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,18 @@
11
impl 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
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
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+
}

0 commit comments

Comments
 (0)