给定一个无序数组arr,求出需要排序的最短子数组长度
思路:找波峰
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr= {1,2,3,7,8,4,5,6};
find(arr,arr.length);
}
public static void find(int[] arr,int n)
{
int p1=-1;//左侧标签
int p2=-1;//右侧标签
int max=arr[0];
int min=arr[n-1];
for(int i=0;i<n;i++)
{ //不停更新历史最高点
//只要低于历史最高峰就需要扩展排序的端点
if(arr[i]>max)
{
max=arr[i];
}
if(arr[i]<max)
{
p2=i;
}
}
//只要左侧出现比历史最低高的,就应该将边界扩展到此处
for(int i=n-1;i>=0;i--)
{
if(arr[i]<min)
{
min=arr[i];
}
if(arr[i]>min)
{
p1=i;
}
}
if(p1==-1)
{
System.out.print("("+0+")");
}
System.out.print("("+(p1+1)+","+(p2+1)+")");
}