题目很简单,求需要排序的最短子数组长度
假设数组为a b c d e f g h i j k l m n
如果abc是有序的,mn是有序的,至于中间的defghijkl是无序的,我们可以得知,如果是正常升序序列,左边的一定是小于右边的任意数值,右边的一定大于左边的任意数值。
所以我们从后往前遍历,如果某个元素大于右边最小的元素,就标记,一直遍历到最左边
从前往后遍历,如果某个元素小于左边的最大的元素,则标记,一直遍历到最右边
程序如下
#include<iostream>
#include <hash_map>
#include <algorithm>
using namespace std;
int a[]={1,5,3,4,2,6,7};
int num=7;
int minpos,maxpos;
int minnum=INT_MAX,maxnum=INT_MIN;
void findArray(int len)
{
int i;
for(i=len-1;i>=0;i--)
{
if(a[i]>minnum)
minpos=i;
minnum=std::min(a[i],minnum);
}
for(i=0;i<len;i++)
{
if(a[i]<maxnum)
maxpos=i;
maxnum=max(a[i],maxnum);
}
}
int main()
{
findArray(7);
return 0;
}