#include<iostream>
#include<algorithm>
using namespace std;
int getMinLength(int* arr, int l){
if(arr == NULL || l < 2){ //一个元素无需排序
return 0;
}
//按照增序排列得话, 如果一个数组最后一位用MIN表示,没有乱序,应该不会存在arr[i]大于MIN得情况,如果存在,则需要进行排序
int MIN = arr[l - 1];
int noMinIndex = -1;
for(int i = l -2; i != -1; i--){ //边界条件 因为最小值赋值给MIN,所以从L-2开始遍历
if(arr[i] > MIN){
noMinIndex = i; //记录最后一个使得arr[i] 大于MIN得位置
}else{
MIN = min(MIN, arr[i]); //更新
}
}
if(noMinIndex == -1){ //未发现arr[i]>MIN 无需排序
return 0;
}
int noMaxIndex = -1;
for(int i = 1; i != l; i++){
if(arr[i] < MAX){
noMaxIndex = i;
}else{
MAX = max(MAX, arr[i]);
}
}
int main(){
int arr[] = {1,5,3,4,2,6,7};
int length = getMinLength(arr,sizeof(arr)/sizeof(int));
std::cout<< length<< std::endl;
}
#include<algorithm>
using namespace std;
int getMinLength(int* arr, int l){
if(arr == NULL || l < 2){ //一个元素无需排序
return 0;
}
//按照增序排列得话, 如果一个数组最后一位用MIN表示,没有乱序,应该不会存在arr[i]大于MIN得情况,如果存在,则需要进行排序
int MIN = arr[l - 1];
int noMinIndex = -1;
for(int i = l -2; i != -1; i--){ //边界条件 因为最小值赋值给MIN,所以从L-2开始遍历
if(arr[i] > MIN){
noMinIndex = i; //记录最后一个使得arr[i] 大于MIN得位置
}else{
MIN = min(MIN, arr[i]); //更新
}
}
if(noMinIndex == -1){ //未发现arr[i]>MIN 无需排序
return 0;
}
//
int MAX = arr[0];int noMaxIndex = -1;
for(int i = 1; i != l; i++){
if(arr[i] < MAX){
noMaxIndex = i;
}else{
MAX = max(MAX, arr[i]);
}
}
/*if(noMaxIndex == -1){
return 0;
}*/ //这个语句不用写是因为,在前一步已经进行判断,如果有序,直接已经退出了,无需进行下面得判断
return noMaxIndex -noMinIndex +1;}
int main(){
int arr[] = {1,5,3,4,2,6,7};
int length = getMinLength(arr,sizeof(arr)/sizeof(int));
std::cout<< length<< std::endl;
}