2295-替换数组中的元素
给你一个下标从 0 开始的数组 nums
,它包含 n
个 互不相同 的正整数。请你对这个数组执行 m
个操作,在第 i
个操作中,你需要将数字 operations[i][0]
替换成 operations[i][1]
。
题目保证在第 i
个操作中:
operations[i][0]
在nums
中存在。operations[i][1]
在nums
中不存在。
请你返回执行完所有操作后的数组。
示例 1:
**输入:** nums = [1,2,4,6], operations = [[1,3],[4,7],[6,1]]
**输出:** [3,2,7,1]
**解释:** 我们对 nums 执行以下操作:
- 将数字 1 替换为 3 。nums 变为 [ _ **3**_ ,2,4,6] 。
- 将数字 4 替换为 7 。nums 变为 [3,2, _ **7**_ ,6] 。
- 将数字 6 替换为 1 。nums 变为 [3,2,7, _ **1**_ ] 。
返回最终数组 [3,2,7,1] 。
示例 2:
**输入:** nums = [1,2], operations = [[1,3],[2,1],[3,2]]
**输出:** [2,1]
**解释:** 我们对 nums 执行以下操作:
- 将数字 1 替换为 3 。nums 变为 [ _ **3**_ ,2] 。
- 将数字 2 替换为 1 。nums 变为 [3, _ **1**_ ] 。
- 将数字 3 替换为 2 。nums 变为 [ _ **2**_ ,1] 。
返回最终数组 [2,1] 。
提示:
n == nums.length
m == operations.length
1 <= n, m <= 105
nums
中所有数字 互不相同 。operations[i].length == 2
1 <= nums[i], operations[i][0], operations[i][1] <= 106
- 在执行第
i
个操作时,operations[i][0]
在nums
中存在。 - 在执行第
i
个操作时,operations[i][1]
在nums
中不存在。
Problem: 2295. 替换数组中的元素
[TOC]
思路
- 首先我们使用所有的操作项,创建第一个哈希表用于合并操作,它的 key 表示被变化的值 to,val 表示变化的值 from。什么意思呢?假设我们之前的操作项是 1 变成 2 ,在我们的哈希中就记录为 key 为 2 ,val 为 1 ,表示 2 是从 1 变过来的,接下来我们遇到操作项为 2 变到 3 ,那我们就找数组中是否存在之前被变化成 2 的值,即 map.get(from),其为 1 ,若存在就重新建立映射, key 为新的值 3 ,val 为 1,这两次操作就被合并了,表示这两次操作之后,1 会变成 3。又因为每次操作,from 都会变成 to,数组中不会存在 from 这个值 ,因此每次删掉 from 这个 key 值。
- 然后创建完成之后,因为 from 和 to 我们之前是用 key 和 val 反着记录的,因此我们可以重新创建一个哈希,将它正过来记录。方便最后直接映射返回。
Code
1 |
|
Comments