面试题 16.16. 部分排序

tech2022-09-22  71

给定一个整数数组,编写一个函数,找出索引m和n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。注意:n-m尽量最小,也就是说,找出符合条件的最短序列。函数返回值为[m,n],若不存在这样的m和n(例如整个数组是有序的),请返回[-1,-1]。

正向遍历找极小值,反向遍历找极大值,然后分别找到极小值和极大值本应所在的位置即可,时间复杂度O(n)。

class Solution { public: vector<int> subSort(vector<int>& array) { if(array.size()==0||array.size()==1)return {-1,-1}; int m= -1; int n = -1; int max = INT_MIN; int min= INT_MAX; for(int i=0;i<array.size();i++) { if(array[i]<max)m=i; else max = array[i]; if(array[array.size()-1-i]>min)n=array.size()-1-i; else min = array[array.size()-1-i]; } return {n,m}; } };
最新回复(0)