前缀和2:2615等值距离和

news2025/1/15 20:37:04

2615. 等值距离和 - 力扣(LeetCode)

做这道题之前,先完成1685. 有序数组中差绝对值之和 - 力扣(LeetCode)

 一般性的,我们能在这类题目中总结出以下规律:

求解有序数组中每个元素与q的差值res时,q 与数组交于 j :

left = q*j - pre[j]
right = pre[n] - pre[j] - q * (n - j)
res = left + right

那么假设我们已经求得a,a中存储的是nums中相同元素的下标,比如nums=[1,3,1,1,2],则对于元素1,它的a = [0, 2, 3]。

求解的结果存在res中,对元素1,我们需要求解res[0], res[2], res[3]

res[0] =  |0 - 0| - |0 - 2| + |0 - 3|

res[2] =  |0 - 2| - |2 - 2| + |2 - 3|

res[3] =  |0 - 3| - |2 - 3| + |3 - 3|

for j, q in enumerate(a):
    ...
    res[j] = left + right

其中:

left = q * j - pre[j]
right = pre[n] - pre[j] - q * (n - j)

可以看到就本题的核心就和1685完全一致,问题就只剩下了怎么构造这个数组a,这里我用了哈希表存储:

groups = defaultdict(list)
for i, x in enumerate(nums):
    groups[x].append(i)  # 记录相同元素的下标

完整代码如下

class Solution:
    def distance(self, nums: List[int]) -> List[int]:
        groups = defaultdict(list)
        for i, x in enumerate(nums):
            groups[x].append(i)  # 相同元素分到同一组,记录下标
        ans = [0] * len(nums)
        for a in groups.values():
            n = len(a)
            s = list(accumulate(a, initial=0))  # 计算数组a前i个元素的前缀和,以0开头

            for j, target in enumerate(a):
                left = target * j - s[j]  # 蓝色面积
                right = s[n] - s[j] - target * (n - j)  # 绿色面积
                ans[target] = left + right
        return ans

类似题目:(31条消息) 前缀和:leetcode2602数组元素全部相等的最少操作次数_坠金的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/435695.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Traceroute的原理及应用挑战

1 Traceroute简介 Traceroute 是继 ping 之后使用最广泛的网络诊断工具之一,因为它简单且应用范围非常广泛。 traceroute 的可能应用范围从简单的网络错误诊断到揭示底层网络拓扑的大型扫描。然而,由于 traceroute 不是在考虑现代网络技术的情况下构建的…

让你轻松入门APP自动化测试:UiAutomator2框架基础解析

目录 前言 一、uiautomator/uiautomator2的前生今世 1.官方文档介绍 2.梳理一下脉络 3.三款框架对比 二、uiautomator2简介 1.项目组成 2.工作原理 三、环境搭建 1.安装uiautomator2 2.初始化设备 3.init时都干了啥? 四、基础操作 1.连接设备 2.命令…

IEEE SPL | 基于图注意力机制的音频语意概述

本文由哈工程智能信号处理组与悉尼科技大学、萨里大学合作,发表于IEEE信号处理学会期刊IEEE Signal Processing Letters,论文一作为2020级硕士研究生肖飞扬。 论文链接:https://arxiv.org/abs/2304.03586 论文代码:https://github…

GPT 任务指令 = 定义角色 + 背景信息 + 任务目标 + 输出要求

GPT 任务指令 定义角色 背景信息 任务目标 输出要求 环境 GPT-4 0. 你是一名专业的导游,负责为我生成旅游计划,现在我来北京旅游,需要你为我生成一份 3天2晚的北京旅游规划。我的要求是:1.地点包括故宫、军播和环球影城。 2…

你一定能看懂的SQL事务及其实现原理

一。概念 事务 是数据库执行原子操作的基本单位。一个事务中的多个修改,则要么全部成功执行,要么全部不执行。 关于事务的 MYSQL 官网的解释 Transactions are atomic units of work that can be *committed* or *rolled back*. When a transaction ma…

substrate实例-基于OCW发送一个签名交易

目录标题 1. 获取substrate-node-template代码2. 添加一个用于测试的ocw-test目录至pallets3. 编写ocw-test/src/lib.rs代码3.1 需要用到的包名的引用3.2 模块crypto的实现3.3 mode pallet 的实现-config、storage、event3.4 mode pallet 的实现-call3.5 mode pallet 的实现-ho…

整理的汉字及拼音、编码数据文件,依据拼音声母进行归类共计2万多条

本篇文章主要讲解自己整理的汉字拼音数据资源的下载及使用方法。 资源截图 包含:sql、xls、txt、json等格式文件 汉字涵盖:多音字、生僻字 下载地址:https://download.csdn.net/download/hj960511/87705416 使用方法 步骤一、下载资源包&…

七、使用arcgis对道路结果进行后处理及iou优化步骤详解

最近在研究对道路的后处理 废话不多说 直接放我的教程了 分别对real真实和predict预测的图片进行镶嵌操作 教程在这里 工具在这里 结果如下 矢量化提取道路中心线 经过很多尝试 arcscan是提取效果最好的一个方法,操作见这 或者这里这篇文章注解更详细一点&am…

问题汇总1

问题汇总 Linux相关1. vim 修改挂载文件时 报错 read-only filesystem2.root 用户密码无法更改3.linux 用户被锁定4.linux 查看登录日志其他小问题 Windows 相关1.添加 删除 默认路由2.exel合并单元格 添加 分隔符 Linux相关 1. vim 修改挂载文件时 报错 read-only filesystem …

Linux namespace

​ 前言 从《initrd&init进程》可知,我们通过ssh连接linux服务器,其实主是linux启动一shell进程与我们做交互。而Linux又是多租户的,这使用得用户与用户间产生了,资源的争抢。 如何隔离资源,且让用户都无法察觉&…

SpringBoot项目实现热部署

文章目录 SpringBoot实现热部署手动开启热部署自动开启热部署热部署相关配置 SpringBoot实现热部署 什么是热部署? 所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时…

初学数据库

1、什么是数据库 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。 每个数据库都有一个或多个不同的API用于创建,访问,管理,搜索和复制所保存的数据。 我们也可以将数据存储在文件中,但是在…

企业级实践:大厂项目研发流程

引言 战国邹孟轲《孟子离娄上》:“离娄之明,公输子之巧,不以规矩,不能成方圆。” 每一个行业都有自己行之有效的规矩,同样软件行业也有自己一套的开发流程,今天就来跟大家聊一聊咱们公司的开发流程&#…

智能修改文案-智能写作平台

智能原创自动写作工具在线 随着人工智能技术的发展,智能原创自动写作工具在线已经成为了网络营销的一个重要工具。这种工具可以根据您输入的关键词和主题,自动生成高质量、原创性强的文章。下面是智能原创自动写作工具在线的优势。 节省时间和人力成本 …

IDEA重复下载SNAPSHOT包问题

问题现象 reimport 之后 状态栏显示resolving dependencies… 遇到某个比较大的快照包(33M),同一天的第2个版本时 1.0-xxx-SNAPSHOT.时间戳-2 idea importer 会先分片下载 x.jar.part文件中,然后复制为x.jar吧 如图中所示,其实已经下载完了&…

C++四种类型转换运算符

C语言之所以增加强制类型转换的语法,就是为了强调风险,让程序员意识到自己在做什么。 但是,这种强调风险的方式还是比较粗放,粒度比较大,它并没有表明存在什么风险,风险程度如何。再者,C风格的…

深入浅出OkHttp,【带你手写】构建高效、高性能的网络请求框架

简述 OKHttp是一个用Java编写的网络框架,可用于 Android,以及一些基于Java的web应用开发中。它使用了HTTP/2标准的支持和连接池技术,可以让应用快速向Web服务器发送网络请求,并得到响应。OKHttp提供了一个简单的API,允…

【SQL】列的选择与查询

本文内容参考书籍《SQL基础教程》第二章,课后习题在最后,请多指教。之前章节的内容请点击下方链接。 前言 PostgreSQL的下载与安装 第一章 数据库的创建,表的创建、更新、删除 一、SELECT语句 1、查询表中的列 (1&#xff09…

【每日一题】——移除元素

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

重装系统重启后无法进入系统解决方法

重启无法进入系统怎么办?让大家平日里使用小白装机系统的话,很有可能会由于没有办法顺利的进行引导菜单而导致无法进入系统下面,小编今天教大家小白装机重启无法进入系统解决方法。 方法/步骤: 方法一:运用热键再次进入。 1、小…