要求: 给定一个无序数组arr,求出需要排序的最短子数组长度
1 // getMinLength.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 7 using namespace std; 8 9 void getMinLength(int arr[],int len) 10 { 11 if(len == 0) 12 return; 13 14 //从后往前找到最小值,并记录最小值左边比它大的数的范围 15 int noMinIndex = -1; 16 int minNum = arr[len - 1]; 17 for(int i = len -2;i > -1;i--) 18 { 19 if(arr[i] > minNum) 20 noMinIndex = i; 21 else 22 minNum = min(minNum,arr[i]); 23 } 24 25 if(noMinIndex == -1) 26 return; 27 28 29 //从前往后找一个极大值,并找到该极大值右边比它小的最远范围 30 int noMaxIndex = -1; 31 int maxNum = arr[0]; 32 for(int i =1;i < len;i++) 33 { 34 if(arr[i] < maxNum) 35 noMaxIndex = i; 36 else 37 maxNum = max(arr[i],maxNum); 38 } 39 40 cout<<noMinIndex<<" ---"<<noMaxIndex<<" :"<<noMaxIndex-noMinIndex+1<<endl; 41 } 42 43 int _tmain(int argc, _TCHAR* argv[]) 44 { 45 int arr[] = {1,5,3,4,2,6,7}; 46 int len = 7; 47 getMinLength(arr,len); 48 system("pause"); 49 return 0; 50 }