File tree Expand file tree Collapse file tree 2 files changed +68
-0
lines changed Expand file tree Collapse file tree 2 files changed +68
-0
lines changed Original file line number Diff line number Diff line change 86
86
538. 把二叉搜索树转换为累加树
87
87
543. 二叉树的直径
88
88
560. 和为 K 的子数组
89
+ 581. 最短无序连续子数组
89
90
583. 两个字符串的删除操作
90
91
589. N叉树的前序遍历
91
92
617. 合并二叉树
Original file line number Diff line number Diff line change
1
+ // 581. 最短无序连续子数组
2
+
3
+
4
+ /*
5
+ 排序:拷贝数组并排序,从左右到中间,比较两个数组元素不同的位置,得到无序子数组的左右边界,左右边界差值即为最短无序连续子数组的长度
6
+ */
7
+ class Solution {
8
+ public int findUnsortedSubarray (int [] nums ) {
9
+ if (isSorted (nums )) {
10
+ return 0 ;
11
+ }
12
+ int n = nums .length ;
13
+ int [] newNums = Arrays .copyOf (nums , n );
14
+ Arrays .sort (newNums );
15
+ int left = 0 , right = n - 1 ;
16
+ while (nums [left ] == newNums [left ]) {
17
+ left ++;
18
+ }
19
+ while (nums [right ] == newNums [right ]) {
20
+ right --;
21
+ }
22
+ return right - left + 1 ;
23
+ }
24
+
25
+ private boolean isSorted (int [] nums ) {
26
+ for (int i = 0 ; i < nums .length - 1 ; i ++) {
27
+ if (nums [i ] > nums [i + 1 ]) {
28
+ return false ;
29
+ }
30
+ }
31
+ return true ;
32
+ }
33
+ }
34
+
35
+
36
+ /*
37
+ 1、假设把数组分成三段,左段和右段是标准的升序数组,中段数组虽是无序的,但满足最小值大于等于左段的最大值,最大值小于等于右段的最小值
38
+ 2、需要找到中段的左右边界
39
+ 1)从左到右遍历,动态维护当前最大值max,那么最后一个小于max的元素位置就是右边界(如果大于等于max就会归于右段)
40
+ 2)从右到左遍历,动态维护当前最小值min,那么最后一个大于min的元素位置就是左边界(如果小于等于min就会归于左段)
41
+ 3、左右边界差值就是最短无序连续子数组的长度
42
+
43
+ 左段 中段 右段
44
+ 1 2 3 4 6 4 7 5 7 4 7 8 9
45
+ ↑ ↑ ↑ ↑
46
+ begin min max end
47
+ */
48
+ class Solution {
49
+ public int findUnsortedSubarray (int [] nums ) {
50
+ int n = nums .length ;
51
+ int min = nums [n - 1 ], max = nums [0 ];
52
+ int begin = 0 , end = -1 ;
53
+ for (int i = 0 ; i < n ; i ++) {
54
+ if (nums [i ] < max ) {
55
+ end = i ;
56
+ } else {
57
+ max = nums [i ];
58
+ }
59
+ if (nums [n - i - 1 ] > min ) {
60
+ begin = n - i - 1 ;
61
+ } else {
62
+ min = nums [n - i - 1 ];
63
+ }
64
+ }
65
+ return end - begin + 1 ;
66
+ }
67
+ }
You can’t perform that action at this time.
0 commit comments