对于一个无序数组A,请设计一个算法,求出需要排序的最短子数组的长度。
给定一个整数数组A及它的大小n,请返回最短子数组的长度。
[1,5,3,4,2,6,7],7
4
class ShortSubsequence {
public:
int findShortest(vector<int> A, int n) {
//正向 更新最大值 同时记录最大值大于当前值的下标
//如果最大值大于当前值,说明前面部分的最值至少要在当前位置之后放置。
int pmax=A[0], pidx=-1;
for(int i = 0; i < n; i++){
if(A[i] >= pmax) pmax = A[i];
else pidx = i;
}
if(pidx == -1) return 0;
//如果从右往左的最小值小于当前值,说明右边的最小值至少要排在当前值之前
int qmin=A[n-1], qidx = -1;
for(int i = n-1; i >= 0; i--){
if(A[i] <= qmin) qmin = A[i];
else qidx = i;
}
return pidx - qidx + 1;
}
};