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

【LeetCode:2766. 重新放置石块 + 哈希表】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述
在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 哈希表
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 2766. 重新放置石块

⛲ 题目描述

给你一个下标从 0 开始的整数数组 nums ,表示一些石块的初始位置。再给你两个长度 相等 下标从 0 开始的整数数组 moveFrom 和 moveTo 。

在 moveFrom.length 次操作内,你可以改变石块的位置。在第 i 次操作中,你将位置在 moveFrom[i] 的所有石块移到位置 moveTo[i] 。

完成这些操作后,请你按升序返回所有 有 石块的位置。

注意:

如果一个位置至少有一个石块,我们称这个位置 有 石块。
一个位置可能会有多个石块。

示例 1:

输入:nums = [1,6,7,8], moveFrom = [1,7,2], moveTo = [2,9,5]
输出:[5,6,8,9]
解释:一开始,石块在位置 1,6,7,8 。
第 i = 0 步操作中,我们将位置 1 处的石块移到位置 2 处,位置 2,6,7,8 有石块。
第 i = 1 步操作中,我们将位置 7 处的石块移到位置 9 处,位置 2,6,8,9 有石块。
第 i = 2 步操作中,我们将位置 2 处的石块移到位置 5 处,位置 5,6,8,9 有石块。
最后,至少有一个石块的位置为 [5,6,8,9] 。
示例 2:

输入:nums = [1,1,3,3], moveFrom = [1,3], moveTo = [2,2]
输出:[2]
解释:一开始,石块在位置 [1,1,3,3] 。
第 i = 0 步操作中,我们将位置 1 处的石块移到位置 2 处,有石块的位置为 [2,2,3,3] 。
第 i = 1 步操作中,我们将位置 3 处的石块移到位置 2 处,有石块的位置为 [2,2,2,2] 。
由于 2 是唯一有石块的位置,我们返回 [2] 。

提示:

1 <= nums.length <= 105
1 <= moveFrom.length <= 105
moveFrom.length == moveTo.length
1 <= nums[i], moveFrom[i], moveTo[i] <= 109
测试数据保证在进行第 i 步操作时,moveFrom[i] 处至少有一个石块。

🌟 求解思路&实现代码&运行结果


⚡ 哈希表

🥦 求解思路
  1. 该题目的求解思路比较简单,我们可以使用map来记录每一个位置出现的次数,也可以通过有序表treeset来记录元素,既可以去重,又可以保证有序,因为元素个数并不会影响最终的结果(就是题目中说的全部交换)。
  2. 遍历moveFrom和moveTo数组,先获得move的次数,加到to的次数上,最后移除move,注意,如果move和to位置想等,直接跳过即可。
  3. 最后list收集map中所有的key,并对其进行升序排序。
  4. 有了基本的思路,接下来我们就来通过代码来实现一下的解法。
🥦 实现代码
class Solution {public List<Integer> relocateMarbles(int[] nums, int[] moveFrom, int[] moveTo) {List<Integer> ans = new ArrayList<>();int n = moveFrom.length;HashMap<Integer, Integer> map = new HashMap<>();for (int v : nums) {map.put(v, map.getOrDefault(0, v) + 1);}for (int i = 0; i < n; i++) {int move = moveFrom[i], to = moveTo[i];if (move == to)continue;int cnt = map.getOrDefault(0, move);map.put(to, map.getOrDefault(0, to) + cnt);map.remove(move);}for (Map.Entry<Integer, Integer> entry : map.entrySet()) {ans.add(entry.getKey());}Collections.sort(ans);return ans;}
}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 构建智慧水利系统,优化水资源管理:结合物联网、云计算等先进技术,打造全方位、高效的水利管理系统,实现水资源的最大化利用
  • Word 导入导出
  • 算法类学习笔记 ———— 红绿灯检测
  • vue3页面编写-导入导出excel、展开查询项等
  • 【Android】安卓四大组件之广播知识总结
  • 云计算实训12——配置web服务器、配置客户端服务器、配置DNS服务、实现DNS域名解析
  • 深入理解算数表达式求值:后缀表达式的转换与计算
  • Python爬虫实战案例(爬取图片)
  • 【MySQL进阶之路 | 高级篇】redo日志和undo日志
  • 以太坊的可扩展性危机:探索执行层的瓶颈
  • DNS续集
  • 【时时三省】unity test 测试框架 下载
  • 【日常记录】【JS】对一个数组,按照某个字段的值,进行分组
  • Flutter 使用 url_launcher的canLaunchUrl() 方法总是返回false错误
  • 如何用JavaScript实现视频观看时间追踪
  • 【剑指offer】让抽象问题具体化
  • ➹使用webpack配置多页面应用(MPA)
  • 002-读书笔记-JavaScript高级程序设计 在HTML中使用JavaScript
  • CentOS6 编译安装 redis-3.2.3
  • gcc介绍及安装
  • js 实现textarea输入字数提示
  • tweak 支持第三方库
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 面试遇到的一些题
  • 使用API自动生成工具优化前端工作流
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 我看到的前端
  • 小程序开发中的那些坑
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #《AI中文版》V3 第 1 章 概述
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2)leetcode 234.回文链表 141.环形链表
  • (70min)字节暑假实习二面(已挂)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第13章第6节 (嵌套的Finally代码块)
  • (vue)el-cascader级联选择器按勾选的顺序传值,摆脱层级约束
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (算法)Travel Information Center
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (转)Android中使用ormlite实现持久化(一)--HelloOrmLite
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • ./和../以及/和~之间的区别
  • .gitignore文件使用
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .net core 管理用户机密
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net 程序 换成 java,NET程序员如何转行为J2EE之java基础上(9)
  • .NET 事件模型教程(二)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET面试题(二)
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • /dev下添加设备节点的方法步骤(通过device_create)