假设我们有一个名为 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