![Python编程300例:快速构建可执行高质量代码](https://wfqqreader-1252317822.image.myqcloud.com/cover/209/36862209/b_36862209.jpg)
上QQ阅读APP看书,第一时间看更新
例16 移动石子
1.问题描述
在x轴上分布着n个石子,用arr数组表示它们的位置。把这些石子移动到1,3,5,7,2n-1或者2,4,6,8,2n。也就是说,这些石子移动到从1开始连续的奇数位,或从2开始连续的偶数位上。返回最少的移动次数。每次只可以移动1个石子,只能把石子往左移动1个单位或往右移动1个单位。同一个位置不能同时有2个石子。
2.问题示例
[5,4,1],只需要把4移动1步到3,所以输出是1。arr=[1,6,7,8,9],最优的移动方案为把1移动到2,把6移动到4,把7移动到6,把9移动到10,所以输出是5。
3.代码实现
![](https://epubservercos.yuewen.com/E3EF07/19549640501519606/epubprivate/OEBPS/Images/Figure-P30_24218.jpg?sign=1739255058-rwZnyDmNKOvzzi5CJ65lzB3wiKbUDM4T-0-1a76c8efe6c5cc3233278699fd0db033)
4.运行结果
数组:[1,6,7,8,9]
最小移动数:5