待排序的最短子数组长度(C++版)

来源:互联网 发布:java集合结构图 编辑:程序博客网 时间:2024/05/16 16:54
题目:

对于一个数组,请设计一个高效算法计算需要排序的最短子数组的长度。

给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的长度。

(原序列位置从0开始标号,若原序列有序,返回0)。保证A中元素均为正整数。


思路:

分别从

左->右:记录最大元素值 比较最大元素值和当前遍历元素的大小 如果 最大值 > 当前元素 记录当前元素下标, 直至数组遍历完成。  —— index1

右->左:记录最小元素值 比较最小元素值和当前遍历元素的大小 如果 最小值 < 当前元素 记录当前元素下标, 直至数组遍历完成。 —— index2


最后返回 (index1 - index2 + 1)

注释:如果原数组是有序的 那么返回0即可。


贴代码:

int getMin(int a, int b){        return (a < b) ? a : b;    }        int getMax(int a, int b){        return (a > b) ? a : b;    }        int shortestSubsequence(vector<int> A, int n) {        int L_R_dx = 0, max = A[0];int R_L_dx = 0, min = A[n - 1];for(int i = 1; i < n; ++i){if(max > A[i]){L_R_dx = i;}max = getMax(max, A[i]);}for(int i = n - 2; i >= 0; --i){if(min < A[i]){R_L_dx = i;}min = getMin(min, A[i]);}        if (L_R_dx == 0 && R_L_dx == 0){return 0;}else{return (L_R_dx - R_L_dx + 1);}    }


0 0
原创粉丝点击