1685. 有序数组中差绝对值之和

简介: 1685. 有序数组中差绝对值之和

给你一个 非递减 有序整数数组 nums 。


请你建立并返回一个整数数组 result,它跟 nums 长度相同,且result[i] 等于 nums[i] 与数组中所有其他元素差的绝对值之和。


换句话说, result[i] 等于 sum(|nums[i]-nums[j]|) ,其中 0 <= j < nums.length 且 j != i (下标从 0 开始)。


示例 1:


输入:nums = [2,3,5]

输出:[4,3,5]

解释:假设数组下标从 0 开始,那么

result[0] = |2-2| + |2-3| + |2-5| = 0 + 1 + 3 = 4,

result[1] = |3-2| + |3-3| + |3-5| = 1 + 0 + 2 = 3,

result[2] = |5-2| + |5-3| + |5-5| = 3 + 2 + 0 = 5。

示例 2:

输入:nums = [1,4,6,8,10]

输出:[24,15,13,15,21]


提示:

  • 2 <= nums.length <= 105
  • 1 <= nums[i] <= nums[i + 1] <= 104
class Solution:
    def getSumAbsoluteDifferences(self, nums: List[int]) -> List[int]:
        total_sum = 0
        prefix_sum = [0] * len(nums)
        
        # 计算前缀和
        for i in range(len(nums)):
            total_sum += nums[i]
            prefix_sum[i] = total_sum
        
        # 计算每个数的差绝对值之和
        output = [0] * len(nums)
        for i in range(len(nums)):
            sum_of_left_differences = (i + 1) * nums[i] - prefix_sum[i]
            sum_of_right_differences = prefix_sum[-1] - prefix_sum[i] - nums[i] * (len(nums) - 1 - i)
            output[i] = sum_of_left_differences + sum_of_right_differences
        
        return output


解题思路


因为数组是有序的, 对数任意一个数nums[i],

在数nums[i]左边的数比nums[i]小, 在nums[i]右边的数比nums[i]大,

因此, 计算nums[i]和其他数的差绝对值之和可以分割为两部分来进行计算.

首先计算前缀和数组prefixSum[], prefixSum[i]表示前i个数之和.

对于nums[i]的左半部分, nums[i]与其他数的差绝对值之和可计算为:


sumOfLeftDifferences = (i+1)*nums[i]-prefixSum[i];

对于nums[i]的右半部分, nums[i]与其他数的绝对值之和可计算为:

sumOfRightDifferences = prefixSum[nums.length-1]-prefixSum[i]-nums[i]*(nums.length-1-i);

所以, 当前nums[i]与左右其他数的绝对值之和为:

sumOfDifferences = sumOfLeftDifferences+sumOfRightDifferences;


  • 在循环中,首先计算了整个列表的总和,并用prefix_sum列表保存了前缀和。
  • 然后,在第二个循环中,针对每个元素,计算了其左边和右边所有元素的差的绝对值之和。
  • 最后,将每个元素的左边差绝对值之和和右边差绝对值之和相加,得到了最终的结果列表output。


这段代码的目的是计算每个数的差的绝对值之和,并返回一个列表,其中每个元素是对应位置数的差的绝对值之和。


目录
打赏
0
0
0
0
19
分享
相关文章
Spring Boot 与 HBase 的完美融合:探索高效大数据应用开发的新途径
【8月更文挑战第29天】Spring Boot是一款广受好评的微服务框架,以其便捷的开发体验著称。HBase则是一个高性能的大数据分布式数据库系统。结合两者,可极大简化HBase应用开发。本文将对比传统方式与Spring Boot集成HBase的区别,展示如何在Spring Boot中优雅实现HBase功能,并提供示例代码。从依赖管理、连接配置、表操作到数据访问,Spring Boot均能显著减少工作量,提升代码可读性和可维护性,使开发者更专注业务逻辑。
572 1
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
阿里云 Confidential Al 最佳实践
本次分享的主题是阿里云 Confidential AI 最佳实践 ,由阿里云乾越分享。 1. 需求背景介绍 2. 大规模场景下面临的系统及安全风险 3. 计算栈的共享职责模型与用户信任边界的冲突 4. 传统计算、存储和网络安全技术中存在用户信任成本较高的问题 5. Confidential AI 方案实施模式 6. 基于CAI技术的阿里云Confidential Cloud Computing架构 7. Confidential AI on EGS DEMO 8. 阿里云全面应用Confidential AI 9. 完备的机密计算远程证明过程 10.发布《机密计算保障人工智能系统安全研究报告
222 1
UE5 Motion Warping功能学习
UE5 Motion Warping功能学习
422 0
UE5 Motion Warping功能学习
前端实现文件预览(pdf、excel、word、图片)
前端实现文件预览(pdf、excel、word、图片)
488 0
光云科技快麦ERP正式入选阿里云原生合作伙伴计划,赋能企业“新基建”
阿里云在云原生领域的投入广泛而深入,在容器、服务网格和 Serverless 等领域均有丰富的技术和产品体系,目前阿里云已经拥有国内最丰富的云原生产品家族、最全面的云原生开源贡献、最大规模的云原生应用实践、最大的云原生客户群体。
1310 54
光云科技快麦ERP正式入选阿里云原生合作伙伴计划,赋能企业“新基建”
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问