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

来源:互联网 发布:淘宝网抓绒女式外套 编辑:程序博客网 时间:2024/05/16 14:31

题解:方法是从后面往前遍历找出比已遍历的数的最小值大的位置1,再从前面遍历找出比已遍历数的最大值小的位置2,然后位置2减去位置1加上1就是长度。

 eg; 1 5 4 2 3   ,位置1=2,位置2=5,所以长度=5-2+1=4

#include<iostream>using namespace std;int  a[100],n;int minLength() {int minNum, maxNum, min, max;minNum = -1;min = a[n - 1];for (int i = n - 1;i >= 0;i--) {if (a[i] > min)minNum = i;else if (a[i] < min)min = a[i];}if (minNum == -1)       /*如果minNum值不变,表示就是有序的排列,所以直接返回0*/return 0;maxNum = -1;max = a[0];for ( int i = 0;i <n;i++) {if (a[i] < max)maxNum = i;else if (a[i] > max)max = a[i];}if (maxNum == minNum)return 0;elsereturn maxNum - minNum + 1;}int main() {cout << "请输入数组的大小并输入一组数:";cin >> n;for (int i = 0;i < n;i++)cin >> a[i];cout << minLength() << endl;}

 

0 0
原创粉丝点击