Skip to main content

Command Palette

Search for a command to run...

Solving Leetcode Interviews in Seconds with AI: Minimum Absolute Sum Difference

Updated
3 min read

Introduction

In this blog post, we will explore how to solve the LeetCode problem "1818" using AI. LeetCode is a popular platform for preparing for coding interviews, and with the help of AI tools like Chatmagic, we can generate solutions quickly and efficiently - helping you pass the interviews and get the job offer without having to study for months.

Problem Statement

You are given two positive integer arrays nums1 and nums2, both of length n. The absolute sum difference of arrays nums1 and nums2 is defined as the sum of |nums1[i] - nums2[i]| for each 0 <= i < n (0-indexed). You can replace at most one element of nums1 with any other element in nums1 to minimize the absolute sum difference. Return the minimum absolute sum difference after replacing at most one element in the array nums1. Since the answer may be large, return it modulo 109 + 7. |x| is defined as: x if x >= 0, or -x if x < 0. Example 1: Input: nums1 = [1,7,5], nums2 = [2,3,5] Output: 3 Explanation: There are two possible optimal solutions: - Replace the second element with the first: [1,7,5] => [1,1,5], or - Replace the second element with the third: [1,7,5] => [1,5,5]. Both will yield an absolute sum difference of |1-2| + (|1-3| or |5-3|) + |5-5| = 3. Example 2: Input: nums1 = [2,4,6,8,10], nums2 = [2,4,6,8,10] Output: 0 Explanation: nums1 is equal to nums2 so no replacement is needed. This will result in an absolute sum difference of 0. Example 3: Input: nums1 = [1,10,4,4,2,7], nums2 = [9,3,5,1,7,4] Output: 20 Explanation: Replace the first element with the second: [1,10,4,4,2,7] => [10,10,4,4,2,7]. This yields an absolute sum difference of |10-9| + |10-3| + |4-5| + |4-1| + |2-7| + |7-4| = 20 Constraints: n == nums1.length n == nums2.length 1 <= n <= 105 1 <= nums1[i], nums2[i] <= 105

Explanation

Here's the solution approach:

  • Calculate Initial Sum and Identify Potential Reduction: Iterate through the arrays to calculate the initial absolute sum difference. Simultaneously, for each index, determine the potential reduction in the absolute difference if we were to replace nums1[i] with a closer value from nums1.
  • Binary Search for Optimal Replacement: For each nums1[i], use binary search on a sorted version of nums1 to find the element closest to nums2[i]. This allows for efficient identification of the best replacement within nums1.
  • Maximize Reduction and Apply Modulo: Track the maximum possible reduction achieved by replacing one element. Finally, subtract this maximum reduction from the initial sum and return the result modulo 109 + 7.

  • Runtime Complexity: O(n log n), Storage Complexity: O(n)

Code

    def minAbsoluteSumDiff(nums1, nums2):
    n = len(nums1)
    initial_sum = 0
    max_reduction = 0
    sorted_nums1 = sorted(nums1)
    MOD = 10**9 + 7

    for i in range(n):
        diff = abs(nums1[i] - nums2[i])
        initial_sum = (initial_sum + diff) % MOD

        # Binary search to find the closest element in sorted_nums1 to nums2[i]
        left, right = 0, n - 1
        closest = float('inf')

        while left <= right:
            mid = (left + right) // 2
            if sorted_nums1[mid] == nums2[i]:
                closest = nums2[i]
                break
            elif sorted_nums1[mid] < nums2[i]:
                closest = sorted_nums1[mid]
                left = mid + 1
            else:
                closest = sorted_nums1[mid]
                right = mid - 1


        # Check the element to the "left" and "right" found by binary search.
        potential_values = []
        if left < n and right >=0:  #check both are valid
             potential_values.extend([sorted_nums1[left], sorted_nums1[right]])
        elif left < n:
            potential_values.append(sorted_nums1[left])
        elif right >= 0:
            potential_values.append(sorted_nums1[right])
        else:
            pass


        for val in potential_values:
            reduction = diff - abs(val - nums2[i])
            max_reduction = max(max_reduction, reduction)

    return (initial_sum - max_reduction) % MOD

More from this blog

C

Chatmagic blog

2894 posts