File tree Expand file tree Collapse file tree 1 file changed +60
-0
lines changed Expand file tree Collapse file tree 1 file changed +60
-0
lines changed Original file line number Diff line number Diff line change
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
+ };
You can’t perform that action at this time.
0 commit comments