对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。
给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。
测试样例:
输入:[1,4,6,5,9,10],6
返回:2
class Subsequence {
public:
int shortestSubsequence(vector<int> A, int n) {
// write code here
int max = A[0], r_idx = -1;
int min = A[n-1], l_idx = -1;
for(int i=1; i<n; i++){
if(A[i] < max){
r_idx = i;
}else if(A[i] > max){
max = A[i];
}
}
for(int i=n-1; i>=0; i--){
if(A[i] > min){
l_idx = i;
}else if(A[i] < min){
min = A[i];
}
}
return r_idx == l_idx ? 0 : r_idx - l_idx + 1;
// 用三元运算符可以省略下面语句,比较简洁
//if (r_idx == l_idx){
//return 0;
//}else{
//return r_idx - l_idx + 1;
//}
}
};