Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 49fea5c

Browse files
feat: add rust solution to lc problem: No.0581 (doocs#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)

AltStyle によって変換されたページ (->オリジナル) /