2_19最短子数组

对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。

给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。

测试样例:
输入:[1,4,6,5,9,10],6
返回:2

class Subsequence {
public:
    int shortestSubsequence(vector 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 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;
       //}
    }
};

你可能感兴趣的:(2_19最短子数组)