【LeetCode:2766. 重新放置石块 + 哈希表】
创始人
2024-12-17 23:09:50
0

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,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 relocateMarbles(int[] nums, int[] moveFrom, int[] moveTo) {         List ans = new ArrayList<>();         int n = moveFrom.length;         HashMap 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 entry : map.entrySet()) {             ans.add(entry.getKey());         }         Collections.sort(ans);         return ans;     } } 
🥦 运行结果

在这里插入图片描述


💬 共勉

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

在这里插入图片描述

在这里插入图片描述

相关内容

热门资讯

据报道!正宗牛总管辅助,微信游... 据报道!正宗牛总管辅助,微信游戏决胜游戏辅助,黑科技教程(好像有挂)-哔哩哔哩1、微信游戏决胜游戏辅...
现场直击!蛮王大厅辅助教程,越... 现场直击!蛮王大厅辅助教程,越乡游义乌辅助器微信免费,玩家教你(切实是有挂)-哔哩哔哩1、越乡游义乌...
据文件显示!上饶中至脚本,人海... 据文件显示!上饶中至脚本,人海大厅脚本,曝光教程(竟然是有挂)-哔哩哔哩人海大厅脚本辅助器中分为三种...
据相关数据显示!微信小程序多功... 据相关数据显示!微信小程序多功能修改器,天天飞小鸡辅助,解说技巧(都是真的是有挂)-哔哩哔哩1、实时...
有玩家发现!三哥玩辅助,钱塘十... 有玩家发现!三哥玩辅助,钱塘十水三攻略,wepoke教程(切实真的有挂)-哔哩哔哩1、用户打开应用后...
现有说明如下!海贝之城辅助,上... 现有说明如下!海贝之城辅助,上品游戏辅助器,力荐教程(好像有挂)-哔哩哔哩1、上品游戏辅助器ai辅助...
截至发稿!天天川南辅助,小程序... 截至发稿!天天川南辅助,小程序牵手跑得辅助,必赢方法(确实是真的挂)-哔哩哔哩1、小程序牵手跑得辅助...
目前!丽水都莱智能辅助神器,正... 目前!丽水都莱智能辅助神器,正宗牛总管辅助,透明教程(总是是有挂)-哔哩哔哩1、玩家可以在丽水都莱智...
截至目前!快乐碰胡辅助,四川游... 截至目前!快乐碰胡辅助,四川游戏家园破解版,详细教程(切实有挂)-哔哩哔哩四川游戏家园破解版软件透明...
最新消息!开心泉州辅助,欢乐茶... 最新消息!开心泉州辅助,欢乐茶馆免费辅助设置,细节揭秘(一直存在有挂)-哔哩哔哩1)欢乐茶馆免费辅助...