文章目录

  • 1. 题目
  • 2. 解题

1. 题目

给你一个下标从 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 <= 10^5
1 <= arr[i] <= 10^5

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/intervals-between-identical-elements
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 按照数字分组
  • 对每组数字的 下标求前缀和,因为对 i 位置前面的可以拆成 i-i前,后面的可以拆成 i后-i
  • 利用前缀和获取同符号的区间的和
class Solution {public:vector<long long> getDistances(vector<int>& arr) {unordered_map<int,vector<long long>> pos; //  相同数字的位置for(int i = 0; i < arr.size(); ++i)pos[arr[i]].push_back(i); // 数字的各个位置vector<long long> ans(arr.size(), 0);for(auto& p : pos){vector<long long> pp = p.second;for(int i = 1; i < pp.size(); ++i)pp[i] += pp[i-1]; // 各个位置的前缀和int lnum = 0, rnum = p.second.size();for(int i = 0; i < p.second.size(); ++i){lnum = i; // i 左边有的同数字的 个数rnum = p.second.size()-i-1; // 右侧有的个数long long idx = p.second[i]; // 对应原来数组中的位置ans[idx] = pp.back()-pp[i] - idx*rnum + idx*lnum - (i>0 ? pp[i-1] : 0);// a1,a2,... i, ... b1, b2 后半段的都可以拆成 b1-i, b2-i, 个数  rnum个// 前半段 都可以拆成 i-a1, i-a2,... 个数 lnum个// a1, a2, ... 的和用前缀和直接获取// b1, b2, ... 的和用前缀和做差获取}}return ans;}
};

340 ms 131.3 MB C++


我的CSDN博客地址 https://michael.blog.csdn.net/

长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

LeetCode 2121. 相同元素的间隔之和(前缀和)相关推荐

  1. LeetCode 1085. 最小元素各数位之和

    文章目录 1. 题目 2. 解题 1. 题目 给你一个正整数的数组 A. 然后计算 S,使其等于数组 A 当中最小的那个元素各个数位上数字之和. 最后,假如 S 所得计算结果是 奇数 的请你返回 0, ...

  2. Leetcode:0002(两数之和)

    LeetCode:0002(两数之和) 题目描述:给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这 ...

  3. 【LeetCode】重复元素相关题目

    [LeetCode]重复元素相关题目 文章目录 [LeetCode]重复元素相关题目 存在重复元素★ 存在重复元素 II★ 存在重复元素 III★★ 重复 N 次的元素★ 寻找重复数★★ 存在重复元素 ...

  4. 元素 tx:annotation-driven 的前缀 tx 未绑定

    在配置 /projectName/src/main/resources/spring-mybatis.xml 文件添加以下内容, <!-- 开启事务注解驱动 --> <tx:anno ...

  5. matlab矩阵绝对值,matlab怎么求一个矩阵所有元素的绝对值之和,看完就明白了

    有时候我们在使用matlab的时候,想求一个矩阵所有元素的绝对值之和,怎么求呢,下面来分享一下方法 工具/材料 matlab 求矩阵所有元素的绝对值之和 操作方法 01 第一步在我们的电脑上打开mat ...

  6. 人工智能-范数 norm:L1范数和L2范数【L0范数:向量中非0的元素的个数; L1范数:向量各元素的绝对值之和(曼哈顿距离);L2范数:向量各元素的平方和的开方值(欧氏距离)】

    范数是衡量某个向量空间(或矩阵)中的每个向量的长度或大小. ∥x∥p:=(∑i=1n∣xi∣p)1p\left \| x\right \|_p := \left( \sum_{i=1}^{n}\lef ...

  7. LeetCode 2145. 统计隐藏数组数目(前缀和)

    文章目录 1. 题目 2. 解题 1. 题目 给你一个下标从 0 开始且长度为 n 的整数数组 differences ,它表示一个长度为 n + 1 的 隐藏 数组 相邻 元素之间的 差值 . 更正 ...

  8. LeetCode 5832. 构造元素不等于两相邻元素平均值的数组

    文章目录 1. 题目 2. 解题 1. 题目 给你一个 下标从 0 开始 的数组 nums ,数组由若干 互不相同的 整数组成. 你打算重新排列数组中的元素以满足:重排后,数组中的每个元素都 不等于 ...

  9. LeetCode 528. 按权重随机选择(前缀和+二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个正整数数组 w ,其中 w[i] 代表下标 i 的权重(下标从 0 开始),请写一个函数 pickIndex ,它可以随机地获取下标 i,选取下标 ...

最新文章

  1. tcp和udp多线程的epoll服务器+客户端源代码 - brucema的个人空间 - 开源中国社区
  2. SNAP实现(转自SuiFei)
  3. C++中的string 类型占几个字节
  4. 怎么转化大小写_亚马逊search term被限制,Search Terms只能写一行怎么办?
  5. 带你利用一句话完成转场动画
  6. django 默认查询条件_Python之Django系列-创建第一个应用-4
  7. 解决maven打包报错:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2
  8. Mac安装sqlmap【亲测有用】
  9. 编程科普书籍推荐(Java)
  10. 【学习笔记】multiset+multimap之equal_range、upper_bound、lower_bound、count
  11. 探索 AIX 6:新特性概述(上)(转自IBM)
  12. 音视频常见问题分析和解决:延时和抖动
  13. 自然对数底数e的由来
  14. 2D转换 动画 3D转换
  15. python设置分辨率和调整画布大小
  16. 华为云平台部署虚拟机-SinoDB
  17. 最简单的ShaderToy入门 - 笑脸渲染
  18. h5登录input框浏览器输入账号密码样式设置
  19. Matlab中三维直方图的显示方法
  20. 用 Mathematica 生成迷宫

热门文章

  1. python rowcount_PyQt(Python+Qt)学习随笔:QTableWidget的currentItem、rowCount、columnCount等部件状态属性访问方法...
  2. 怎么ie取消要打开或保存来自_取消认证后,发票抵扣就这么简单!
  3. Java笔记08-Map详解
  4. 【Python基础入门系列】第08天:Python List
  5. 【python】hashlib.shasha256练习注册 --笔记
  6. kail中tools的安装和第一个php学习笔记
  7. php mysql xa事务_XA mysql php 分布式事务
  8. android模拟机新闻APP,DavidTGNewsProject
  9. VMware vCenter Server6.5安装及群集配置介绍
  10. jquery插件课程1 幻灯片、城市选择、日期时间选择、拖放、方向拖动插件