您的位置:首页 > 其它

需要排序的最短子数组

2017-09-04 21:47 302 查看
对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度.

/* 思路:首先,从左往右遍历数组,单独用一个变量记录遍历过得最大值

* 遇到遍历过的最大值大于当前数的情况,记录这种情况的最右的位置

* 然后从右往左遍历数组,用一个变量记录遍历过得最小值

* 遇到最小值比当前数要小的情况,记录这种情况的最左的位置

* 最做的位置和最右的位置中间的范围就是最短子数组

*

*/

public class 最短子数组 {
public static void main(String[] args) {
int A[]={1,5,4,3,2,6,7,2};
System.out.println(shortestSubsequence(A, A.length));
}

public static int shortestSubsequence(int[] A, int n) {
if (n<=1) {
return 0;
}
int max=A[0];
int min=A[n-1];
int left=0;
int right=0;
for(int i=0;i<n;i++){
if (A[i]>=max) {
max=A[i];
}else{
left=i;
}
}

for(int j=n-1;j>=0;j--){
if (A[j]<=min) {
min=A[j];
}else{
right=j;
}
}

if (left==right) {
return 0;
}

return left-right+1;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  遍历