题目:原题链接(中等)

标签:贪心算法、二分查找

解法 时间复杂度 空间复杂度 执行用时
Ans 1 (Python) O ( N l o g N ) O(NlogN) O(NlogN) O ( N ) O(N) O(N) 448ms (66.23%)
Ans 2 (Python)
Ans 3 (Python)

解法一:

import bisect


class Solution:
    _MOD = 10 ** 9 + 7

    def minAbsoluteSumDiff(self, nums1: List[int], nums2: List[int]) -> int:
        n = len(nums1)
        array1 = list(sorted(nums1))

        ans = 0  # 绝对差值和
        most = 0  # 最大可缩小值
        for i in range(n):
            n1, n2 = nums1[i], nums2[i]
            diff = abs(n2 - n1)

            ans += diff

            maybe = 0
            j = bisect.bisect_right(array1, n2)
            # print(array1, n2, j)
            if j > 0:
                diff1 = abs(n2 - array1[j - 1])
                maybe = max(maybe, diff - diff1)
            if j < n:
                diff2 = abs(n2 - array1[j])
                maybe = max(maybe, diff - diff2)

            most = max(most, maybe)

        # print(ans, most)

        return (ans - most) % self._MOD