Coding 【每日一题】移动石子 -Python-20211008

Jack · 2021年10月08日 · 最后由 Jack 回复于 2021年10月09日 · 14 次阅读
本帖已被设为精华帖!
  1. 问题描述: 有 x 轴上分布着 n 个石子,用 arr 数组表示它们的位置,任务是把这些石子移动到 1, 3, 5, 7, 2n-1 或者 2, 4, 6, 8, 2n 位置。 换句话说,这些石子要么全部移动到奇数位,要么全部移动到偶数位,返回最少的移动次数。每次只能移动 1 个石子,且每次只能移动一个单位,同一位置不能同时有 2 个石子。
  2. 问题示例: [5, 4, 1],只需把 4 移动 1 步,就能得到 3,所以最小移动数是 1 [1, 6, 7, 8, 9] ,把 1 移动到 2,把 6 移动到 4,把 7 移动到 6,把 9 移动到 10,所以最小移动数是 5
Jack 将本帖设为了精华贴 10月08日 21:08

参考代码:

class Solution:
    def movingStones(self, arr):
        arr = sorted(arr)
        even = 0
        odd = 0
        for i in range(0, len(arr)):
            odd += abs(arr[i] - (2*i + 1))
            even += abs(arr[i] - (2*i + 2))
        if odd < even:
            return odd
        return even
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册