使用 Python 查找使数组相等的最小操作的程序

假设我们有一个值 n,考虑一个包含 n 个元素的数组 nums,其中所有 i 的 arr[i] = (2*i)+1。现在在一个操作中,我们可以选择两个索引 x 和 y,其中 0 <= x, y < n 并从 nums[x] 中减去 1,然后将 1 添加到 nums[y]。我们必须使数组的所有元素都相同。因此,如果我们有 n,我们必须找到使 nums 的所有元素相同所需的最少操作次数。

因此,如果输入像 n = 4,那么输出将是 4,因为对于 n 数组是 [1,3,5,7],现在在第一次操作之后我们可以使数组像 [2,3,5,6 ],在第二次操作之后我们可以制作[3,3,5,5],然后在第三次[4,3,4,5]之后,最后是[4,4,4,4]。所以现在所有人都是平等的。

为了解决这个问题,我们将按照以下步骤操作 -

  • 答案:= 0

  • 如果 n 等于 1,则

    • 返回答案

  • q:= (n/2) -1 的商

  • j:= 1

  • 当 q>=0 时,做

    • ans:= ans + (nj)

    • q := q - 1

    • j := j + 2

  • 返回答案

让我们看看以下实现以获得更好的理解 -

示例

def solve(n):
   ans=0
   if n==1:
      return ans
   q=(n//2)-1
   j=1
   while q>=0:
      ans=ans+(n-j)
      q-=1
      j+=2
   return ans
n = 4
print(solve(n))

输入

4
输出结果
4

猜你喜欢