Program to find number of operations needed to make pairs from first and last side are with same sum in Python

Suppose we have a list of numbers called nums with even length. We can perform operations where we select any number and update it with a value in range [1, maximum of nums]. We need to find the minimum number of operations required so that for every index i, nums[i] + nums[n-1-i] equals the same number.

For example, if nums = [8,6,2,5,9,2], we can change the first 2 at index 2 to 5, and 9 at index 4 to 4. The array becomes [8,6,5,5,4,2], where all pairs sum to 10: (8+2) = (6+4) = (5+5) = 10.

Algorithm

The solution uses an event-based approach to track how many pairs can achieve each possible sum:

  • For each pair (nums[i], nums[n-1-i]), calculate the range of possible sums
  • Use events to track when pairs can start and stop contributing to a target sum
  • Find the maximum number of pairs that can simultaneously achieve the same sum
  • Return total pairs minus maximum achievable pairs

Implementation

def solve(nums):
    N = len(nums)
    mx = max(nums)
    events = []
    
    # Process each pair
    for idx in range(N // 2):
        a = nums[idx]
        b = nums[N - idx - 1]
        
        # Event points for this pair's contribution
        events.append((min(a + 1, b + 1), 1))      # Can start contributing
        events.append((a + b, 1))                   # Natural sum (no changes)
        events.append((a + b + 1, -1))              # Stop natural contribution
        events.append((max(a + mx, b + mx) + 1, -1)) # Stop all contribution
    
    # Sort events and find maximum simultaneous pairs
    events.sort()
    current = 0
    mx_same = 0
    
    for event, delta in events:
        current += delta
        mx_same = max(current, mx_same)
    
    return N // 2 - mx_same

# Test the function
nums = [8, 6, 2, 5, 9, 2]
result = solve(nums)
print(f"Input: {nums}")
print(f"Minimum operations needed: {result}")
Input: [8, 6, 2, 5, 9, 2]
Minimum operations needed: 2

How It Works

For each pair of elements at positions i and n-1-i:

  • Natural sum: a + b (no operations needed)
  • One operation: Change one element to range [1, mx], giving sum range [min(a+1, b+1), max(a+mx, b+mx)]
  • Two operations: Change both elements, giving any sum in [2, 2*mx]

The events track when pairs can contribute to each possible target sum, and we find the sum that maximizes the number of contributing pairs.

Example Walkthrough

# For nums = [8,6,2,5,9,2]
# Pairs: (8,2), (6,9), (2,5)
# Natural sums: 10, 15, 7
# Maximum pairs with same sum: 1 (only one pair naturally sums to each value)
# Total pairs: 3, so minimum operations: 3 - 1 = 2

nums = [1, 2, 3, 4]
result = solve(nums)
print(f"Input: {nums}")
print(f"Minimum operations needed: {result}")
print("Pairs: (1,4)=5, (2,3)=5 - already equal, so 0 operations needed")
Input: [1, 2, 3, 4]
Minimum operations needed: 0
Pairs: (1,4)=5, (2,3)=5 - already equal, so 0 operations needed

Conclusion

This algorithm efficiently finds the minimum operations by using an event-sweep technique to determine the maximum number of pairs that can achieve the same sum. The time complexity is O(n log n) due to sorting the events.

Updated on: 2026-03-26T17:10:06+05:30

211 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements