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 7429e15

Browse files
feat: add solutions to lc problem: No.0581.Shortest Unsorted Continuous Subarray
1 parent f6a0ebf commit 7429e15

File tree

3 files changed

+114
-23
lines changed

3 files changed

+114
-23
lines changed

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

Lines changed: 53 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,22 +56,74 @@
5656

5757
<!-- 这里可写通用的实现逻辑 -->
5858

59+
将排序后的数组与原数组进行比较,确定左右边界。更进一步优化,可以通过维护最大值和最小值,一次遍历得出结果(见 Golang 解法)
60+
5961
<!-- tabs:start -->
6062

6163
### **Python3**
6264

6365
<!-- 这里可写当前语言的特殊实现逻辑 -->
6466

6567
```python
66-
68+
class Solution:
69+
def findUnsortedSubarray(self, nums: List[int]) -> int:
70+
n = len(nums)
71+
numsSorted = sorted(nums)
72+
left, right = 0, n - 1
73+
while left < n and nums[left] == numsSorted[left]:
74+
left += 1
75+
while right >= 0 and nums[right] == numsSorted[right]:
76+
right -= 1
77+
return 0 if right == -1 else right - left + 1
6778
```
6879

6980
### **Java**
7081

7182
<!-- 这里可写当前语言的特殊实现逻辑 -->
7283

7384
```java
85+
class Solution {
86+
public int findUnsortedSubarray(int[] nums) {
87+
int n = nums.length;
88+
int[] numsSorted = new int[n];
89+
System.arraycopy(nums, 0, numsSorted, 0, n);
90+
Arrays.sort(numsSorted);
91+
int left = 0, right = n - 1;
92+
while (left < n && nums[left] == numsSorted[left]) {
93+
left++;
94+
}
95+
while (right >= 0 && nums[right] == numsSorted[right]) {
96+
right--;
97+
}
98+
return right == -1 ? 0 : right - left + 1;
99+
}
100+
}
101+
```
74102

103+
### **Go**
104+
105+
```go
106+
func findUnsortedSubarray(nums []int) int {
107+
n := len(nums)
108+
maxn, minn := math.MinInt32, math.MaxInt32
109+
left, right := -1, -1
110+
for i := 0; i < n; i++ {
111+
if maxn > nums[i] {
112+
right = i
113+
} else {
114+
maxn = nums[i]
115+
}
116+
if minn < nums[n-i-1] {
117+
left = n - i - 1
118+
} else {
119+
minn = nums[n-i-1]
120+
}
121+
}
122+
if right == -1 {
123+
return 0
124+
}
125+
return right - left + 1
126+
}
75127
```
76128

77129
### **...**

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

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,63 @@
4949
### **Python3**
5050

5151
```python
52-
52+
class Solution:
53+
def findUnsortedSubarray(self, nums: List[int]) -> int:
54+
n = len(nums)
55+
numsSorted = sorted(nums)
56+
left, right = 0, n - 1
57+
while left < n and nums[left] == numsSorted[left]:
58+
left += 1
59+
while right >= 0 and nums[right] == numsSorted[right]:
60+
right -= 1
61+
return 0 if right == -1 else right - left + 1
5362
```
5463

5564
### **Java**
5665

5766
```java
67+
class Solution {
68+
public int findUnsortedSubarray(int[] nums) {
69+
int n = nums.length;
70+
int[] numsSorted = new int[n];
71+
System.arraycopy(nums, 0, numsSorted, 0, n);
72+
Arrays.sort(numsSorted);
73+
int left = 0, right = n - 1;
74+
while (left < n && nums[left] == numsSorted[left]) {
75+
left++;
76+
}
77+
while (right >= 0 && nums[right] == numsSorted[right]) {
78+
right--;
79+
}
80+
return right == -1 ? 0 : right - left + 1;
81+
}
82+
}
83+
```
5884

85+
### **Go**
86+
87+
```go
88+
func findUnsortedSubarray(nums []int) int {
89+
n := len(nums)
90+
maxn, minn := math.MinInt32, math.MaxInt32
91+
left, right := -1, -1
92+
for i := 0; i < n; i++ {
93+
if maxn > nums[i] {
94+
right = i
95+
} else {
96+
maxn = nums[i]
97+
}
98+
if minn < nums[n-i-1] {
99+
left = n - i - 1
100+
} else {
101+
minn = nums[n-i-1]
102+
}
103+
}
104+
if right == -1 {
105+
return 0
106+
}
107+
return right - left + 1
108+
}
59109
```
60110

61111
### **...**
Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,16 @@
11
class Solution {
22
public int findUnsortedSubarray(int[] nums) {
33
int n = nums.length;
4-
if (n == 1) {
5-
return 0;
4+
int[] numsSorted = new int[n];
5+
System.arraycopy(nums, 0, numsSorted, 0, n);
6+
Arrays.sort(numsSorted);
7+
int left = 0, right = n - 1;
8+
while (left < n && nums[left] == numsSorted[left]) {
9+
left++;
610
}
7-
int[] res = new int[n];
8-
for (int i = 0; i < n; ++i) {
9-
res[i] = nums[i];
11+
while (right >= 0 && nums[right] == numsSorted[right]) {
12+
right--;
1013
}
11-
Arrays.sort(res);
12-
int p = 0;
13-
for (; p < n; ++p) {
14-
if (res[p] != nums[p]) {
15-
break;
16-
}
17-
}
18-
int q = n - 1;
19-
for (; q >= 0; --q) {
20-
if (res[q] != nums[q]) {
21-
break;
22-
}
23-
}
24-
return p == n ? 0 : q - p + 1 ;
25-
14+
return right == -1 ? 0 : right - left + 1;
2615
}
27-
}
16+
}

0 commit comments

Comments
(0)

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