删除最短的子数组使剩余数组有序
今天我们又做了一个有趣的题目,给出题解过程如下:解题思路,以后准备单独写一篇文章去分享
int findLengthOfShortestSubarray(int* arr, int arrSize){
int i=1;
int rank=0;
int a=0,b=0,c=0;
int b_1=0,b_2=0;
int a_1=-1,a_2=0;
int size[100000];
int s,j;
b=1;
for(j=arrSize-1;j>=1;j--){
if(arr[j]>=arr[j-1]){
b=b+1;
}
else break;
}
for(i=1;i<arrSize;i++){
if(arr[i]<arr[i-1]){
rank=arr[i-1];
a_1=i-1;
break;
}
}
if(a_1>=0&&a_1<=10000){
for (i=a_1;i>=0;i--){
rank=arr[i];
s=0;
for(j=arrSize-1;j>=1;j--){
if(arr[j]>=rank){ s=s+1;
}
else {
size[i]=s+i+1;
break;}
if(arr[j]<arr[j-1]){
size[i]=s+i+1;
break;}
}
}
for(i=0;i<=a_1;i++){
if(size[i]>a){
a=size[i];
}
}
}
else if(a_1>10000){
for (i=a_1;i>=a_1-10;i--){
rank=arr[i];
s=0;
for(j=arrSize-1;j>=1;j--){
if(arr[j]>=rank){ s=s+1;
}
else {
size[a_1-i]=s+i+1;
break;}
if(arr[j]<arr[j-1]){
size[a_1-i]=s+i+1;
break;}
}
}
for(i=0;i<=10;i++){
if(size[i]>a){
a=size[i];
}
}
}
else a=arrSize;
if(a>=b)
return arrSize-a;
else return arrSize-b;
}