File tree 1 file changed +40
-0
lines changed
solution/581.Shortest Unsorted Continuous Subarray
1 file changed +40
-0
lines changed Original file line number Diff line number Diff line change
1
+ // i自左向右找到第一个逆序,
2
+ // j自右向左找到第一个逆序
3
+ // 找到nums[i, j]的上下界
4
+ // ij向外扩展找到满足上下界的最小[i, j]
5
+ class Solution {
6
+ public:
7
+ int findUnsortedSubarray (vector<int >& nums) {
8
+ if (1 == nums.size ())
9
+ return 0 ;
10
+
11
+ int i = 0 , j = nums.size ()-1 ;
12
+ while (i < j && nums[i] <= nums[i+1 ])
13
+ ++i ;
14
+ if (i >= j)
15
+ return 0 ;
16
+
17
+ while (nums[j-1 ] <= nums[j])
18
+ --j ;
19
+
20
+ // cout << i << ' ' << j << endl ;
21
+ int m = nums[i] ;
22
+ int M = m ;
23
+ for (int k = i; k <= j; ++k)
24
+ {
25
+ if (m > nums[k])
26
+ m = nums[k] ;
27
+ if (M < nums[k])
28
+ M = nums[k] ;
29
+ }
30
+ // cout << m << ' ' << M << endl ;
31
+
32
+ while (i >= 0 && m < nums[i])
33
+ --i ;
34
+ while (j < nums.size () && M > nums[j])
35
+ ++j ;
36
+
37
+ // cout << i << ' ' << j << endl ;
38
+ return j-i-1 ;
39
+ }
40
+ };
You can’t perform that action at this time.
0 commit comments