最小移动数到排序数组(新问题)

时间:2019-01-21 22:10:46

标签: algorithm sorting

我一直在练习解决问题的方法,而我似乎一无所获...

想象一下,我有一个类似{1,2,4,3}的数组。 我唯一可以执行的操作是将值0的索引移到数组中其他位置。 这不是交换操作,该值只是在其他两个数字之间“挤压”自身。 我可以对数组进行排序的最小数量是多少。 在给定的示例中,解决方案为3 ...

  • (1、2、3、4)=>(2、4、1、3)=>(4、1、2、3)=>(1、2、3、4)

================================================ ============

类似于此问题:https://www.geeksforgeeks.org/count-minimum-number-move-front-moves-sort-array/

但是我只能从前面移动项目,而不能将它们放在前面。

我感谢您为我指明正确方向的任何帮助或提示。这已经让我烦恼了几天。谢谢!

2 个答案:

答案 0 :(得分:2)

找到数组中正确排序的最长后缀,即不包含任何反转的最长后缀。后缀之前的所有内容都必须精确移动一次。

假设您在正确排序的后缀之前有 w 个元素。元素 w-1 (从0开始)必须大于元素 w ,因此它肯定必须移动,并且您必须移动所有 w -1 元素只是为了到达它。因此,必须移动 w 元素。

所有这些 w-1 元素都可以按其正确顺序放在 元素 w-1 之后,因此在元素 w之后-1 被移动,数组将被排序。因此,移动 w 元素就足够了。

答案 1 :(得分:0)

如果在示例中从右到左查看从末尾(排序)到开始的问题,您会发现它已经移到了前面。因此,使用与前移相同的算法(geeksforgeeks),但是expectedItem是值original_arr[n]而不是n。以相反的顺序输出这些动作。