Skip to content

Commit 6e9162b

Browse files
committed
add 581 cpp version
1 parent 0cb7e00 commit 6e9162b

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 numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
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+
};

0 commit comments

Comments
 (0)