对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。
给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。
#include <iostream> #include <vector> using namespace std; class Subsequence { public: int shortestSubsequence(vector<int> A, int n) { int var_max = A[0]; int var_min = A[n-1]; int index1 = 0, index2 = 0; for(int i = 1; i < n; i++){ if(A[i] >= var_max){ var_max = A[i]; }else{ index1 = i; } } for(int i = n-2; i >=0; i--){ if(A[i] <= var_min){ var_min = A[i]; }else{ index2 = i; } } if(index1 == 0 && index2 == 0){ return 0; } return (index1-index2+1); } }; int main() { vector<int> A; //1,4,6,5,9,10 A.push_back(1), A.push_back(4), A.push_back(6), A.push_back(5), A.push_back(9), A.push_back(10); Subsequence sorter; int res = sorter.shortestSubsequence(A, 6); cout<<res<<endl; return 0; }
时间: 2024-10-12 08:57:35