LeetCode-day24-2766. 重新放置石块

LeetCode-day24-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[i] 加到一个哈希集合中。
  2. 遍历 moveFrom 和 moveTo,先把 moveFrom[i]从哈希集合中去掉,然后把 moveTo[i] 加入哈希集合。
  3. 取出哈希集合中的元素,从小到大排序后返回。

代码

python 复制代码
class Solution:
    def relocateMarbles(self, nums: List[int], moveFrom: List[int], moveTo: List[int]) -> List[int]:
        st = set(nums)
        for x,y in zip(moveFrom,moveTo):
            st.remove(x)
            st.add(y)
        return sorted(st)
相关推荐
Goona_3 分钟前
拒绝SQL恐惧:用Python+pyqt打造任意Excel数据库查询系统
数据库·python·sql·excel·pyqt
cccc来财15 分钟前
Java实现大根堆与小根堆详解
数据结构·算法·leetcode
Coovally AI模型快速验证1 小时前
数据集分享 | 智慧农业实战数据集精选
人工智能·算法·目标检测·机器学习·计算机视觉·目标跟踪·无人机
xw33734095641 小时前
彩色转灰度的核心逻辑:三种经典方法及原理对比
人工智能·python·深度学习·opencv·计算机视觉
倔强青铜三1 小时前
为什么 self 与 super() 成了 Python 的永恒痛点?
人工智能·python·面试
墨尘游子1 小时前
目标导向的强化学习:问题定义与 HER 算法详解—强化学习(19)
人工智能·python·算法
恣艺2 小时前
LeetCode 854:相似度为 K 的字符串
android·算法·leetcode
予早2 小时前
《代码随想录》刷题记录
算法
小白学大数据2 小时前
基于Python的新闻爬虫:实时追踪行业动态
开发语言·爬虫·python
freed_Day2 小时前
python面向对象编程详解
开发语言·python