当前位置: 首页 > news >正文

【C++ 基础数学 】2121. 2615相同元素的间隔之和|1760

本文涉及的基础知识点

基础数学

LeetCode2121. 相同元素的间隔之和

难度分:1760
令2165,和此题几乎相等。
给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。
arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地,arr[i] 和 arr[j] 之间的间隔是 |i - j| 。
返回一个长度为 n 的数组 intervals ,其中 intervals[i] 是 arr[i] 和 arr 中每个相同元素(与 arr[i] 的值相同)的 间隔之和 。
注意:|x| 是 x 的绝对值。
示例 1:
输入:arr = [2,1,3,1,2,3,3]
输出:[4,2,7,2,4,4,5]
解释:

  • 下标 0 :另一个 2 在下标 4 ,|0 - 4| = 4
  • 下标 1 :另一个 1 在下标 3 ,|1 - 3| = 2
  • 下标 2 :另两个 3 在下标 5 和 6 ,|2 - 5| + |2 - 6| = 7
  • 下标 3 :另一个 1 在下标 1 ,|3 - 1| = 2
  • 下标 4 :另一个 2 在下标 0 ,|4 - 0| = 4
  • 下标 5 :另两个 3 在下标 2 和 6 ,|5 - 2| + |5 - 6| = 4
  • 下标 6 :另两个 3 在下标 2 和 5 ,|6 - 2| + |6 - 5| = 5
    示例 2:

输入:arr = [10,5,10,10]
输出:[5,0,3,4]
解释:

  • 下标 0 :另两个 10 在下标 2 和 3 ,|0 - 2| + |0 - 3| = 5
  • 下标 1 :只有这一个 5 在数组中,所以到相同元素的间隔之和是 0
  • 下标 2 :另两个 10 在下标 0 和 3 ,|2 - 0| + |2 - 3| = 3
  • 下标 3 :另两个 10 在下标 0 和 2 ,|3 - 0| + |3 - 2| = 4
    提示:
    n == arr.length
    1 <= n <= 105
    1 <= arr[i] <= 105

C++

indexs[i] 记录nums中所有值为i的下标。令 v = indexs[i]。
v[0]的距离各下标的和为: ∑ i : v . s i z e ( ) − 1 ( v [ i ] − v [ 0 ] ) \sum_{i:}^{v.size()-1}(v[i]-v[0]) i:v.size()1(v[i]v[0]) v[j]也可以这样计算,但这样做的总时间复杂度是:O(nn)。
可以通过v[i] 计算v[i+1]:
令有n1个下标<i,有n2个下标大于i+1。
n1个下标 的距离增加了: v[i+1]- v[i]
n2个下标的距离减少了: v[i+1]- v[i]
即:v[i+1]的总距离 = v[i]的总距离+ (n1-n2)*( v[i+1]- v[i])
n1 =i n2 = n - i -2

代码

核心代码

class Solution {public:vector<long long> getDistances(vector<int>& arr) {const int N = arr.size();vector<vector<int>> indexs(100'000 + 1);for (int i = 0; i < arr.size(); i++) {indexs[arr[i]].emplace_back(i);}vector<long long> ret(arr.size());for (const auto& v : indexs) {if (v.empty()) { continue; }long long cur = accumulate(v.begin(), v.end(), 0LL) - (long long)v.front() * v.size();ret[v[0]] = cur;for (int i = 0; i + 1 < v.size(); i++) {ret[v[i + 1]] = ret[v[i]] + ((long long)i-(v.size() - i - 2 )) * ((long long)v[i + 1] - v[i]);}}return ret;}};

单元测试

vector<int> arr;TEST_METHOD(TestMethod11){arr = { 2, 1, 3, 1, 2, 3, 3 };auto res = Solution().getDistances(arr);AssertEx(vector<long long>{4, 2, 7, 2, 4, 4, 5}, res);}TEST_METHOD(TestMethod12){arr = { 10,5,10,10 };auto res = Solution().getDistances(arr);AssertEx(vector<long long>{5,0,3,4}, res);}

扩展阅读

我想对大家说的话
工作中遇到的问题,可以按类别查阅鄙人的算法文章,请点击《算法与数据汇总》。
学习算法:按章节学习《喜缺全书算法册》,大量的题目和测试用例,打包下载。重视操作
有效学习:明确的目标 及时的反馈 拉伸区(难度合适) 专注
闻缺陷则喜(喜缺)是一个美好的愿望,早发现问题,早修改问题,给老板节约钱。
子墨子言之:事无终始,无务多业。也就是我们常说的专业的人做专业的事。
如果程序是一条龙,那算法就是他的是睛
失败+反思=成功 成功+反思=成功

视频课程

先学简单的课程,请移步CSDN学院,听白银讲师(也就是鄙人)的讲解。
https://edu.csdn.net/course/detail/38771
如何你想快速形成战斗了,为老板分忧,请学习C#入职培训、C++入职培训等课程
https://edu.csdn.net/lecturer/6176

测试环境

操作系统:win7 开发环境: VS2019 C++17
或者 操作系统:win10 开发环境: VS2022 C++17
如无特殊说明,本算法用**C++**实现。

相关文章:

【C++ 基础数学 】2121. 2615相同元素的间隔之和|1760

本文涉及的基础知识点 基础数学 LeetCode2121. 相同元素的间隔之和 难度分&#xff1a;1760 令2165&#xff0c;和此题几乎相等。 给你一个下标从 0 开始、由 n 个整数组成的数组 arr 。 arr 中两个元素的 间隔 定义为它们下标之间的 绝对差 。更正式地&#xff0c;arr[i] 和…...

从手动测试菜鸟,到自动化测试老司机,实现自动化落地

虽然许多伙伴是一个测试老人了&#xff0c;但是基本上所有的测试经验都停留在手工测试方面&#xff0c;对于自动化测试方面的实战经验少之又少。 其实&#xff0c;究其原因&#xff1a;一方面是&#xff0c;自动化方面不求上进&#xff0c;觉得会手工测试就可以了&#xff0c;自…...

docker zookeeper集群启动报错:Cannot open channel to * at election address /ip:3888

下面几点需要注意的&#xff1a; 1、确认在每个$zookeeper_home/data/myid中有对应数字 2、是否关闭防火墙&#xff1a;systemctl stop firewalld&#xff0c;systemctl disable firewalld 3、zoo.cfg中的server需要写成以下形式的&#xff1a; 假如有两台机器&#xff0c;1…...

【Linux探索学习】第一弹——Linux的基本指令(上)——开启Linux学习第一篇

前言&#xff1a; 在进入Linux学习之前&#xff0c;我们首先要先做好以下两点&#xff1a;1、已经基本掌握C语言或C&#xff0c;2、已经配置好了Linux的环境&#xff0c;做完以上两点后我们就开始Linux的学习&#xff0c;今天我们首先要学习的就是Linux中最基础的操作&#xff…...

3.Vue2结合element-ui实现国际化多语言i18n

1.安装vue-i18n npm install vue-i18n8.2.1说明&#xff1a;Vue2使用vue-i18n是8.x&#xff0c;Vue3使用的版本是9.x以上&#xff0c;使用错了会导致报错 2.创建多语言文件 在src/下创建src/lang/langs/zh.js和src/lang/langs/en.js两个文件&#xff0c;里面内容如下&#x…...

整数二分算法和浮点数二分算法

整数二分算法和浮点数二分算法 二分 现实中运用到二分的就是猜数字的游戏 假如有A同学说B同学所说数的大小&#xff0c;B同学要在1~100中间猜中数字65&#xff0c;当B同学每次说的数都是范围的一半时这就算是一个二分查找的过程 二分查找的前提是这个数字序列要有单调性 基…...

智能回收箱的功能和使用步骤介绍

智能回收箱是现代城市环保与资源循环利用领域的一项创新技术&#xff0c;它通过集成各种智能化功能&#xff0c;提高了垃圾回收的效率和准确性&#xff0c;促进了垃圾分类与减量。随着全球对环境保护意识的增强和智慧城市概念的推广&#xff0c;智能回收箱的发展前景非常广阔&a…...

Remix在SPA模式下,出现ErrorBoundary错误页加载Ant Design组件报错,不能加载样式的问题

Remix是一个既能做服务端渲染&#xff0c;又能做单页应用的框架&#xff0c;如果想做单页应用&#xff0c;又想学服务端渲染&#xff0c;使用Remix可以降低学习成本。最近&#xff0c;在学习Remix的过程中&#xff0c;遇到了在SPA模式下与Ant Design整合的问题。 我用Remix官网…...

ADB ROOT开启流程

开启adb root 选项后&#xff0c;执行如下代码&#xff1a; packages/apps/Settings/src/com/android/settings/development/AdbRootPreferenceController.java mADBRootService new ADBRootService(); Override public boolean onPreferenceChange(Preference preference…...

传输层协议 —— TCP协议(上篇)

目录 1.认识TCP 2.TCP协议段格式 3.可靠性保证的机制 确认应答机制 超时重传机制 连接管理机制 三次握手 四次挥手 1.认识TCP 在网络通信模型中&#xff0c;传输层有两个经典的协议&#xff0c;分别是UDP协议和TCP协议。其中TCP协议全称为传输控制协议&#xff08;Tra…...

YOLOv8改进,YOLOv8的Neck替换成AFPN(CVPR 2023)

摘要 多尺度特征在物体检测任务中对编码具有尺度变化的物体非常重要。多尺度特征提取的常见策略是采用经典的自上而下和自下而上的特征金字塔网络。然而,这些方法存在特征信息丢失或退化的问题,影响了非相邻层次的融合效果。一种渐进式特征金字塔网络(AFPN),以支持非相邻…...

学习大数据DAY59 全量抽取和增量抽取实战

目录 需求流程&#xff1a; 需求分析与规范 作业 作业2 需求流程&#xff1a; 全量抽取 增量抽取 - DataX Kettle Sqoop ... 场景: 业务部门同事或者甲方的工作人员给我们的部门经理和你提出了新的需 求 流程: 联系 > 开会讨论 > 确认需求 > 落地 需求文档( 具体…...

YOLOv8——测量高速公路上汽车的速度

引言 在人工神经网络和计算机视觉领域&#xff0c;目标识别和跟踪是非常重要的技术&#xff0c;它们可以应用于无数的项目中&#xff0c;其中许多可能不是很明显&#xff0c;比如使用这些算法来测量距离或对象的速度。 测量汽车速度基本步骤如下&#xff1a; 视频采集&#x…...

在线相亲交友系统:寻找另一半的新方式

在这个快节奏的时代里&#xff0c;越来越多的单身男女发现&#xff0c;传统意义上的相亲方式已经难以满足他们的需求。与此同时&#xff0c;互联网技术的迅猛发展为人们提供了新的社交渠道——在线相亲交友系统作者h17711347205。本文将探讨在线相亲交友系统如何成为一种寻找另…...

MySQL 中存储过程参数的设置与使用

《MySQL 中存储过程参数的设置与使用》 在 MySQL 数据库中&#xff0c;存储过程是一组预先编译好的 SQL 语句集合&#xff0c;可以接受参数并返回结果。使用存储过程可以提高数据库的性能和可维护性&#xff0c;同时也可以减少网络流量和代码重复。那么&#xff0c;如何在 MyS…...

2k1000LA 调试HDMI

问题: 客户需要使用HDMI 接口,1080p 的分辨率。 ---------------------------------------------------------------------------------------------------------------- 这里需要看看 龙芯派的 demo 版 的 硬件上的连接。 硬件上: 官方的demo 板 , dvo1 应该是 HDMI的…...

24年蓝桥杯及攻防世界赛题-MISC-1

2 What-is-this AZADI TOWER 3 Avatar 题目 一个恐怖份子上传了这张照片到社交网络。里面藏了什么信息?隐藏内容即flag 解题 ┌──(holyeyes㉿kali2023)-[~/Misc/tool-misc/outguess] └─$ outguess -r 035bfaa85410429495786d8ea6ecd296.jpg flag1.txt Reading 035bf…...

前端项目代码开发规范及工具配置

在项目开发中&#xff0c;良好的代码编写规范是项目组成的重要元素。本文将详细介绍在项目开发中如何集成相应的代码规范插件及使用方法。 项目规范及工具 集成 EditorConfig集成 Prettier1. 安装 Prettier2. 创建 Prettier 配置文件3. 配置 .prettierrc4. 使用 Prettier 集成 …...

【JVM】JVM执行流程和内存区域划分

文章目录 是什么JVM 执行流程内存区域划分堆栈程序计数器元数据区经典笔试题 是什么 Java 虚拟机 JDK&#xff0c;Java 开发工具包JRE&#xff0c;Java 运行时环境JVM&#xff0c;Java 虚拟机 JVM 就是 Java 虚拟机&#xff0c;解释执行 Java 字节码 JVM 执行流程 编程语言…...

Python | 读取.dat 文件

写在前面 使用matlab可以输出为 .dat 或者 .mat 形式的文件&#xff0c;之前介绍过读取 .mat 后缀文件&#xff0c;今天正好把 .dat 的读取也记录一下。 读取方法 这里可以使用pandas库将其作为一个dataframe的形式读取进python&#xff0c;数据内容格式如下&#xff0c;根据…...

从零搭建:4阶段实现wvp-GB28181-pro视频监控平台的容器化部署

从零搭建&#xff1a;4阶段实现wvp-GB28181-pro视频监控平台的容器化部署 【免费下载链接】wvp-GB28181-pro 项目地址: https://gitcode.com/GitHub_Trending/wv/wvp-GB28181-pro 在当今安防监控领域&#xff0c;GB28181协议作为国家标准被广泛应用于视频监控系统中。w…...

浏览器插件开发:OpenClaw+GLM-4.7-Flash增强网页交互

浏览器插件开发&#xff1a;OpenClawGLM-4.7-Flash增强网页交互 1. 为什么需要智能化的浏览器插件&#xff1f; 在日常网页浏览中&#xff0c;我们经常会遇到这样的场景&#xff1a;看到一篇长文想快速提取核心观点&#xff0c;或者需要将网页内容与本地文件进行联动处理。传…...

从潍坊一中赛题看算法竞赛中的数据类型陷阱与优化策略

1. 数据类型陷阱&#xff1a;从潍坊一中T1赛题看数值溢出问题 第一次参加算法竞赛的同学&#xff0c;90%都会在数据类型上栽跟头。就拿潍坊一中T1"揽月湖"这道题来说&#xff0c;表面是简单的数学表达式计算&#xff0c;实则是数据类型选择的经典案例。题目要求计算3…...

xarray 实战指南 - 从数据操作到科学计算

1. 为什么你需要xarray&#xff1f; 第一次接触科学计算时&#xff0c;我用的是NumPy和Pandas。那时候处理气象数据&#xff0c;经常要手动管理维度、坐标和属性&#xff0c;一个简单的时空平均操作要写好几行代码。直到发现了xarray&#xff0c;才明白原来数据处理可以这么优雅…...

DB2数据迁移实战:除了EXPORT/LOAD,这几种备份还原方法你试过吗?

DB2数据迁移实战&#xff1a;超越基础工具的高效策略全景 当测试环境的DB2数据库需要整体搬迁到新服务器时&#xff0c;大多数DBA的第一反应是使用EXPORT/LOAD这对经典组合。但真实场景中&#xff0c;数据迁移远不止简单的导出导入——表结构依赖、CLOB字段处理、编码转换、存储…...

别再让运动模糊毁了你的检测!一文搞懂工业相机飞拍里的CMOS传感器与快门速度怎么配

工业相机飞拍实战&#xff1a;CMOS传感器与快门速度的黄金搭配法则 在一条每分钟处理300个瓶盖的高速灌装线上&#xff0c;质检员小王发现相机拍摄的字符总是出现拖影——这已经是本周第三次因图像模糊导致误检停线了。类似场景每天都在全球数以万计的自动化产线上演&#xff0…...

OpenClaw+Qwen3-32B内容创作流:从提纲到公众号发布的自动化

OpenClawQwen3-32B内容创作流&#xff1a;从提纲到公众号发布的自动化 1. 为什么需要自动化内容创作 作为一个技术博主&#xff0c;我每周至少要产出2-3篇深度文章。最痛苦的时刻不是写作本身&#xff0c;而是面对空白文档时的"冷启动"阶段——从选题构思到完成初稿…...

从WiFi4到WiFi7:一张表格看懂所有代际的真实网速差距(附选购建议)

从WiFi4到WiFi7&#xff1a;四代协议性能全景对比与智能组网决策指南 当你在电商平台搜索"WiFi6路由器"时&#xff0c;超过200款不同价位的设备会瞬间涌入视野。从299元的入门款到4999元的旗舰机型&#xff0c;商家宣传的"AX3000"、"BE6500"等参…...

避坑指南:CentOS虚拟机重启报rdsosreport.txt错误时,为什么xfs_repair有时需要-L参数?

CentOS虚拟机XFS文件系统修复实战&#xff1a;为什么-L参数是最后的救命稻草&#xff1f; 当你深夜加班部署服务&#xff0c;突然虚拟机异常断电&#xff0c;重启后屏幕上赫然出现"generating /run/initramfs/rdsosreport.txt"的报错——这个场景足以让任何Linux管理…...

Linux 内核中的调试技术进阶:从 ftrace 到 BPF

Linux 内核中的调试技术进阶&#xff1a;从 ftrace 到 BPF 引言 作为一名深耕操作系统和嵌入式开发的工程师&#xff0c;我深知调试的重要性。在系统开发中&#xff0c;良好的调试能力可以快速定位和解决问题&#xff0c;提高系统的可靠性。在 Linux 内核中&#xff0c;调试技术…...