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)
相关推荐
嫩萝卜头儿4 分钟前
2 - 复杂度收尾 + 链表经典OJ
数据结构·算法·链表·复杂度
星马梦缘16 分钟前
算法设计与分析 作业二 答案与解析
算法·图论·dfs·bfs·floyd-warshall·bellman_ford·多源最短路
玛丽莲茼蒿17 分钟前
Leetcode hot100 每日温度【中等】
算法·leetcode·职场和发展
cjp56024 分钟前
009.UG二次开发,任务环境草图优化3(高级功能生成直线)
算法
芝士就是力量啊 ೄ೨27 分钟前
Python如何编写一个简单的类
开发语言·python
样例过了就是过了36 分钟前
LeetCode热题100 分割等和子集
数据结构·c++·算法·leetcode·动态规划
胖虎喜欢静香36 分钟前
从零到一快速实现 Mini DeepResearch
人工智能·python·开源
逻辑驱动的ken38 分钟前
Java高频面试考点18
java·开发语言·数据库·算法·面试·职场和发展·哈希算法
qq_3926906642 分钟前
Redis怎样应对Redis集群整体宕机带来的雪崩
jvm·数据库·python
Muyuan19981 小时前
22.让 RAG Agent 更像真实产品:聊天页面优化、PDF 上传、知识库重建与检索片段展示
python·django·pdf·fastapi