用于查找从第一侧和最后一侧进行配对所需的操作数量的程序在 Python 中具有相同的总和

假设我们有一个名为 nums 的数字列表。这个列表的长度是偶数。现在考虑一个操作,我们选择 nums 中的任何数字并用范围 [1 和最大值 nums] 中的值更新它。我们必须找到所需的此类操作的最小数量,以便对于每个 i,nums[i] + nums[n-1-i] 等于相同的数字。

因此,如果输入类似于 nums = [8,6,2,5,9,2],那么输出将是 2,因为如果我们将 nums[2] 处的前 2 改为 5,将 nums[4] 处的前 2 改为 9 ] 到 4,那么元素将是 [8,6,5,5,4,2],那么每个 i 的 nums[i] + nums[n-1-i] 将是 (8+2) = ( 6+4) = (5+5) = 10。

示例

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

def solve(nums):
   N = len(nums)
   mx = max(nums)
   events = []

   idx = 0
   while idx < N // 2:
      a = nums[idx]
      b = nums[N - idx - 1]

      events.append((min(a + 1, b + 1), 1))
      events.append((a + b, 1))
      events.append((a + b + 1, -1))
      events.append((max(a + mx, b + mx) + 1, -1))

   idx += 1

   events.sort()
   current = 0
   mx_same = 0

   for event, delta in events:
      current += delta
      mx_same = max(current, mx_same)

   return N - mx_same

nums = [8,6,2,5,9,2]
print(solve(nums))

输入

[6, 8, 5, 2, 3]
输出结果
2

猜你喜欢