# 面试题 16. 部分排序
给定一个整数数组,编写一个函数,找出索引 m 和 n,只要将索引区间[m,n]的元素排好序,整个数组就是有序的。
# 解题思路
解法一:
- 遍历数组,找到左边升序的最大连续列表;
- 反向遍历数组,找到右边降序的最大连续列表(同时需要确保左边最大值要小于右边的最小值);
- 然后将中间剩余的部分进行排序,获取到最大值和最小值;
- 遍历左边得到的最大序列和中间的最小值比较,找到小于等于最小值的索引;
- 同理,遍历右边得到的最大序列和中间的最大值比较,找打大于等于最大值的索引;
解法二:
如果左侧最大值大于中间的最小值,则一定会被中间序列包括;同理,如果右侧最小值大于中间的最大值,则一定会被中间序列包括。
详细参考官方题解 (opens new window)部分。