![](https://i-blog.csdnimg.cn/blog_migrate/2ce69505f067dd6b95c4c977ef83ab6e.png)
寻找最短序列从数学的角度上来看就是寻找最后一个逆序对的位置,逆序对就是在一个顺序的数组中,出现一个不按顺序排列的值,比如 [1 3 4 2 6 8] 其中原数组原本是个从小到大排序的,其中2是不按顺序排序,2就是个逆序对
从右边往左,找到最后一个变小的数字
从左往右,找到最后一个变大的数字
![](https://i-blog.csdnimg.cn/blog_migrate/76c645017a6fc31c9b149073b77f49fe.png)
![](https://i-blog.csdnimg.cn/blog_migrate/bc36e67f8b6595ced3e688f4400955c4.png)
public int
[] subSort(
int
[] array) {
if
(array.
length
==
0
)
return new int
[]{-
1
,-
1
};
int
max=array[
0
];
int
r=-
1
;
for
(
int
i=
1
;i<array.
length
;i++){
if
(max<=array[i]){
max=array[i];
}
else
{
r=i;
}
}
int
min=array[array.
length
-
1
];
int
l=-
1
;
for
(
int
i=array.
length
-
2
;i>=
0
;i--){
if
(min>=array[i]){
min=array[i];
}
else
{
l=i;
}
}
return new int
[]{l,r};
}
|