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

​LeetCode解法汇总2670. 找出不同元素数目差数组

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台


描述:

给你一个下标从 0 开始的数组 nums ,数组长度为 n 。

nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示,其中 diff[i] 等于前缀 nums[0, ..., i] 中不同元素的数目 减去 后缀 nums[i + 1, ..., n - 1] 中不同元素的数目。

返回 nums 的 不同元素数目差 数组。

注意 nums[i, ..., j] 表示 nums 的一个从下标 i 开始到下标 j 结束的子数组(包含下标 i 和 j 对应元素)。特别需要说明的是,如果 i > j ,则 nums[i, ..., j] 表示一个空子数组。

示例 1:

输入:nums = [1,2,3,4,5]
输出:[-3,-1,1,3,5]
解释:
对于 i = 0,前缀中有 1 个不同的元素,而在后缀中有 4 个不同的元素。因此,diff[0] = 1 - 4 = -3 。
对于 i = 1,前缀中有 2 个不同的元素,而在后缀中有 3 个不同的元素。因此,diff[1] = 2 - 3 = -1 。
对于 i = 2,前缀中有 3 个不同的元素,而在后缀中有 2 个不同的元素。因此,diff[2] = 3 - 2 = 1 。
对于 i = 3,前缀中有 4 个不同的元素,而在后缀中有 1 个不同的元素。因此,diff[3] = 4 - 1 = 3 。
对于 i = 4,前缀中有 5 个不同的元素,而在后缀中有 0 个不同的元素。因此,diff[4] = 5 - 0 = 5 。

示例 2:

输入:nums = [3,2,3,4,2]
输出:[-2,-1,0,2,3]
解释:
对于 i = 0,前缀中有 1 个不同的元素,而在后缀中有 3 个不同的元素。因此,diff[0] = 1 - 3 = -2 。
对于 i = 1,前缀中有 2 个不同的元素,而在后缀中有 3 个不同的元素。因此,diff[1] = 2 - 3 = -1 。
对于 i = 2,前缀中有 2 个不同的元素,而在后缀中有 2 个不同的元素。因此,diff[2] = 2 - 2 = 0 。
对于 i = 3,前缀中有 3 个不同的元素,而在后缀中有 1 个不同的元素。因此,diff[3] = 3 - 1 = 2 。
对于 i = 4,前缀中有 3 个不同的元素,而在后缀中有 0 个不同的元素。因此,diff[4] = 3 - 0 = 3 。 

提示:

  • 1 <= n == nums.length <= 50
  • 1 <= nums[i] <= 50

解题思路:

分别使用前缀和后缀两个Map,Map的key为元素值,value为元素数量。

以某个位置i计算,i之前的统计到前缀Map中,i之后的统计到后缀Map中。

两个Map的数量之差,就是我们想要的答案。

代码:

public class Solution2670 {public int[] distinctDifferenceArray(int[] nums) {Map<Integer, Integer> suffixMap = new HashMap<>();Map<Integer, Integer> prefixMap = new HashMap<>();for (int num : nums) {add2Map(suffixMap, num);}int[] result = new int[nums.length];for (int i = 0; i < nums.length; i++) {add2Map(prefixMap, nums[i]);reduce2Map(suffixMap, nums[i]);result[i] = prefixMap.size() - suffixMap.size();}return result;}private void add2Map(Map<Integer, Integer> map, int key) {Integer num = map.getOrDefault(key, 0);map.put(key, num + 1);}private void reduce2Map(Map<Integer, Integer> map, int key) {Integer num = map.getOrDefault(key, 0);if (num <= 1) {map.remove(key);return;}map.put(key, num - 1);}
}

相关文章:

  • C语言指针学习 之 指针是什么
  • python验证服务器或容器端口是否可以用
  • Linux(ubuntu) -- 安装后调配
  • C语言实现12种排序算法
  • kubernetes内外网通信-集群外节点访问 pod ip
  • k8s二进制及负载均衡集群部署详解
  • grafana安装DevOpsProdigy KubeGraf 1.5.2
  • 协作办公开源神器:ONLYOFFICE
  • BrainAGE作为大脑老化的神经影像标志物的十年
  • 微信小程序for循环嵌套
  • css3 属性 backface-visibility 的实践应用
  • map和set封装
  • unity addressables 加载资源和场景 显示进度条(主要用于WebGL)
  • postman之接口参数签名(js接口HMAC-SHA256签名)
  • PyTorch的nn.Module类的详细介绍
  • [微信小程序] 使用ES6特性Class后出现编译异常
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • Android Studio:GIT提交项目到远程仓库
  • Flex布局到底解决了什么问题
  • laravel with 查询列表限制条数
  • leetcode386. Lexicographical Numbers
  • Netty源码解析1-Buffer
  • PAT A1017 优先队列
  • python3 使用 asyncio 代替线程
  • Spark RDD学习: aggregate函数
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue ES6 Jade Scss Webpack Gulp
  • 观察者模式实现非直接耦合
  • 基于遗传算法的优化问题求解
  • 技术:超级实用的电脑小技巧
  • 开发基于以太坊智能合约的DApp
  • 老板让我十分钟上手nx-admin
  • 首页查询功能的一次实现过程
  • 通过来模仿稀土掘金个人页面的布局来学习使用CoordinatorLayout
  • 小试R空间处理新库sf
  • Prometheus VS InfluxDB
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​【已解决】npm install​卡主不动的情况
  • ​configparser --- 配置文件解析器​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (26)4.7 字符函数和字符串函数
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (done) ROC曲线 和 AUC值 分别是什么?
  • (Oracle)SQL优化技巧(一):分页查询
  • (层次遍历)104. 二叉树的最大深度
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (区间dp) (经典例题) 石子合并
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)Sublime Text3配置Lua运行环境
  • *setTimeout实现text输入在用户停顿时才调用事件!*