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)
相关推荐
山北雨夜漫步1 小时前
机器学习 Day14 XGboost(极端梯度提升树)算法
人工智能·算法·机器学习
basketball6161 小时前
Python torchvision.transforms 下常用图像处理方法
开发语言·图像处理·python
到底怎么取名字不会重复1 小时前
Day10——LeetCode15&560
c++·算法·leetcode·哈希算法·散列表
兔子蟹子1 小时前
Java集合框架解析
java·windows·python
宁酱醇1 小时前
各种各样的bug合集
开发语言·笔记·python·gitlab·bug
谷晓光1 小时前
Python 中 `r` 前缀:字符串处理的“防转义利器”
开发语言·python
姚毛毛1 小时前
Windows上,10分钟构建一个本地知识库
python·ai·rag
站大爷IP1 小时前
Python ZIP文件操作全解析:从基础压缩到高级技巧
python
chuxinweihui1 小时前
数据结构——二叉树,堆
c语言·开发语言·数据结构·学习·算法·链表
freexyn2 小时前
Matlab自学笔记五十一:(推荐)输入参数的数量和可变数量的输入
笔记·算法·matlab