需要排序的最短子数组长度

来源:互联网 发布:金融和互联网行业知乎 编辑:程序博客网 时间:2024/04/30 04:45

题目很简单,求需要排序的最短子数组长度

假设数组为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;}


0 0
原创粉丝点击