我一直在练习解决问题的方法,而我似乎一无所获...
想象一下,我有一个类似{1,2,4,3}的数组。 我唯一可以执行的操作是将值0的索引移到数组中其他位置。 这不是交换操作,该值只是在其他两个数字之间“挤压”自身。 我可以对数组进行排序的最小数量是多少。 在给定的示例中,解决方案为3 ...
================================================ ============
类似于此问题:https://www.geeksforgeeks.org/count-minimum-number-move-front-moves-sort-array/
但是我只能从前面移动项目,而不能将它们放在前面。
我感谢您为我指明正确方向的任何帮助或提示。这已经让我烦恼了几天。谢谢!
答案 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
。以相反的顺序输出这些动作。