Skip to content

Commit 5f688d2

Browse files
authored
Update Shortest Unsorted Continuous Subarray.java
1 parent 001695a commit 5f688d2

File tree

1 file changed

+18
-30
lines changed

1 file changed

+18
-30
lines changed
Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,21 @@
11
class Solution {
2-
public int findUnsortedSubarray(int[] nums) {
3-
4-
int[] copy = new int[nums.length];
5-
for (int i=0;i<nums.length;i++) {
6-
copy[i] = nums[i];
7-
}
8-
9-
Arrays.sort(nums);
10-
int start = 0;
11-
int end = nums.length-1;
12-
int ans = 0;
13-
14-
while(start<end) {
15-
if (nums[start] != copy[start] && nums[end] != copy[end]) {
16-
ans = end-start+1;
17-
break;
18-
}
19-
else if (nums[start] == copy[start] && nums[end] != copy[end]) {
20-
start++;
21-
}
22-
else if (nums[start] != copy[start] && nums[end] == copy[end]) {
23-
end--;
24-
}
25-
else if (nums[start] == copy[start] && nums[end] == copy[end]) {
26-
end--;
27-
start++;
28-
}
29-
}
30-
31-
return ans;
2+
public int findUnsortedSubarray(int[] nums) {
3+
Stack<Integer> stack = new Stack<>();
4+
int start = nums.length;
5+
for (int i = 0; i < nums.length; i++) {
6+
while (!stack.isEmpty() && nums[stack.peek()] > nums[i]) {
7+
start = Math.min(start, stack.pop());
8+
}
9+
stack.push(i);
3210
}
11+
stack.clear();
12+
int end = 0;
13+
for (int i = nums.length - 1; i >= 0; i--) {
14+
while (!stack.isEmpty() && nums[stack.peek()] < nums[i]) {
15+
end = Math.max(end, stack.pop());
16+
}
17+
stack.push(i);
18+
}
19+
return end - start > 0 ? end - start + 1 : 0;
20+
}
3321
}

0 commit comments

Comments
 (0)