Skip to content

Commit b647399

Browse files
authored
Create shortest-subarray-to-be-removed-to-make-array-sorted.cpp
1 parent 0dcbb33 commit b647399

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
// Time: O(n)
2+
// Space: O(1)
3+
4+
class Solution {
5+
public:
6+
int findLengthOfShortestSubarray(vector<int>& arr) {
7+
int j;
8+
for (j = arr.size() - 1; j >= 1; --j) {
9+
if (arr[j - 1] > arr[j]) {
10+
break;
11+
}
12+
}
13+
if (j == 0) {
14+
return 0;
15+
}
16+
int result = j;
17+
for (int i = 0; i < arr.size(); ++i) {
18+
if (i && arr[i - 1] > arr[i]) {
19+
break;
20+
}
21+
while (j < arr.size() && arr[i] > arr[j]) {
22+
++j;
23+
}
24+
result = min(result, (j - i + 1) - 2);
25+
}
26+
return result;
27+
}
28+
};
29+
30+
// Time: O(n)
31+
// Space: O(1)
32+
class Solution2 {
33+
public:
34+
int findLengthOfShortestSubarray(vector<int>& arr) {
35+
int result = 0;
36+
for (int i = 1; i < arr.size(); ++i) {
37+
if (arr[i - 1] <= arr[i]) {
38+
continue;
39+
}
40+
int j = arr.size() - 1;
41+
while (j > i && (j == arr.size() - 1 || arr[j] <= arr[j + 1]) && arr[i - 1] <= arr[j]) {
42+
--j;
43+
}
44+
result = j - i + 1;
45+
break;
46+
}
47+
for (int j = arr.size() - 2; j >= 0; --j) {
48+
if (arr[j] <= arr[j + 1]) {
49+
continue;
50+
}
51+
int i = 0;
52+
while (i < j && (i == 0 || arr[i - 1] <= arr[i]) && arr[i] <= arr[j + 1]) {
53+
++i;
54+
}
55+
result = min(result, j - i + 1);
56+
break;
57+
}
58+
return result;
59+
}
60+
};

0 commit comments

Comments
 (0)