• 45. 最大子数组差


    45. 最大子数组差

    中文English

    给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。

    返回这个最大的差值。

    样例

    例1:

    输入:[1, 2, -3, 1]
    输出:6
    解释:
    子数组是 [1,2] 和[-3].所以答案是 6.
    

    例2:

    输入:[0,-1]
    输出:1
    解释:
    子数组是 [0] 和 [-1].所以答案是 1.
    

    挑战

    时间复杂度为O(n),空间复杂度为O(n)

    注意事项

    子数组最少包含一个数

    贪心解法 + 维护四个列表(左大右小, 右大左小)

    class Solution:
        """
        @param nums: A list of integers
        @return: An integer indicate the value of maximum difference between two substrings
        """
        def maxDiffSubArrays(self, nums):
            # 边界检测
            if len(nums) < 2:
                return 0
    
            # 变量定义
            length = len(nums)
            max_sum_array_left, max_sum_array_right = [0]*length, [0]*length
            min_sum_array_left, min_sum_array_right = [0]*length, [0]*length
            
            # 贪心计算
            for i in range(length):
                if i == 0: 
                    max_sum_array_left[0] = nums[0]
                    min_sum_array_left[0] = nums[0]
                else:
                    max_sum_array_left[i] = max(nums[i], nums[i] + max_sum_array_left[i - 1])
                    min_sum_array_left[i] = min(nums[i], nums[i] + min_sum_array_left[i - 1])
    
            
            for i in range(length - 1, -1, -1):
                if  i == length - 1: 
                    max_sum_array_right[length - 1]: max_sum_array_right[length - 1] = nums[length - 1]
                    min_sum_array_right[length - 1]: min_sum_array_right[length - 1] = nums[length - 1]
                else:
                    max_sum_array_right[i] = max(nums[i], nums[i] + max_sum_array_right[i + 1])
                    min_sum_array_right[i] = min(nums[i], nums[i] + min_sum_array_right[i + 1])
            
            # 最后计算
            res = -sys.maxsize
            for i in range(length - 1):
                res = max(res, abs(max_sum_array_left[i] - min_sum_array_right[i + 1]), abs(min_sum_array_left[i] - max_sum_array_right[i + 1]))
            
            return res
  • 相关阅读:
    apache域名跳转
    apache配置防盗链
    apache配置静态缓存
    apache通过rewrite限制某个目录
    apache不记录指定类型的访问日志
    apache访问日志
    apache用户认证
    apache访问控制
    apache禁止默认虚拟主机
    mysql主从复制架构配置
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/14327501.html
Copyright © 2020-2023  润新知