最低限度地排序子阵列

时间:2012-11-28 16:43:16

标签: algorithm

这是一个面试问题。 给定一个整数数组,编写一个方法来查找索引m和n,这样如果你对元素m到n进行排序,整个数组就会被排序。最小化n-m。即找到最小的序列。

2 个答案:

答案 0 :(得分:6)

观察

m之前的整数应该是升序的并且小于(或等于)之后的任何整数。

算法

  1. 从第一个元素开始,并在第一个元素减少时停止。 (子阵列SA)

  2. 找到最小值。 (MIN)

  3. 起点就在SA中的最大整数之后,小于(或等于)MIN。 (m被发现)

  4. 复杂性

    O(N)


    对n。

    做类似的事情

答案 1 :(得分:4)

你需要跟踪四件事:

  1. 开头的已排序区域的结尾
  2. 最后开始排序区域
  3. 起始区域后的最小数字
  4. 结束区域前的最大数量
  5. 首先计算1和2的初步值,方法是从开始和结束扫描数组,直到找到错位的值。

    然后在初步1之后扫描所有内容,找到最小数量。这是你的3.以同样的方式找到4.

    现在你回溯到数组的起始区域,直到找到最小值的位置。这是1和m的确切答案。

    通过回溯结束区域以相同的方式查找n以查找最大数量应该在哪里。