做二手货车网站公司,互联网的推广,seo课程,作者联合开发的小说网站叫什么【LetMeFly】2766.重新放置石块#xff1a;哈希表
力扣题目链接#xff1a;https://leetcode.cn/problems/relocate-marbles/
给你一个下标从 0 开始的整数数组 nums #xff0c;表示一些石块的初始位置。再给你两个长度 相等 下标从 0 开始的整数数组 moveFrom 和 moveTo…【LetMeFly】2766.重新放置石块哈希表
力扣题目链接https://leetcode.cn/problems/relocate-marbles/
给你一个下标从 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 1051 moveFrom.length 105moveFrom.length moveTo.length1 nums[i], moveFrom[i], moveTo[i] 109测试数据保证在进行第 i 步操作时moveFrom[i] 处至少有一个石块。
解题方法哈希表集合
使用一个哈希表集合记录每个石头的位置。
接着遍历每次操作将moveFrom对应的石头在哈希表中移除将moveTo对应的石头在哈希表中插入。
最终将哈希表中的元素放入一个列表中并排序返回。
时间复杂度 O ( n log n ) O(n\log n) O(nlogn)其中 n l e n ( n u m s ) nlen(nums) nlen(nums)空间复杂度 O ( n ) O(n) O(n)
AC代码
C
class Solution {
public:vectorint relocateMarbles(vectorint nums, vectorint moveFrom, vectorint moveTo) {unordered_setint stones(nums.begin(), nums.end());for (int i 0; i moveFrom.size(); i) {stones.erase(moveFrom[i]);stones.insert(moveTo[i]);}vectorint ans(stones.begin(), stones.end());sort(ans.begin(), ans.end());return ans;}
};Go
package mainimport sortfunc relocateMarbles(nums []int, moveFrom []int, moveTo []int) []int {se : map[int]struct{}{}for _, x : range nums {se[x] struct{}{}}for i : 0; i len(moveFrom); i {delete(se, moveFrom[i])se[moveTo[i]] struct{}{}}ans : make([]int, 0, len(se))for x : range se {ans append(ans, x)}sort.Ints(ans)return ans
}Java
import java.util.Set;
import java.util.HashSet;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;class Solution {public ListInteger relocateMarbles(int[] nums, int[] moveFrom, int[] moveTo) {SetInteger se new HashSet(nums.length); // 预先分配空间效率更高for (int t : nums) {se.add(t);}for (int i 0; i moveFrom.length; i) {se.remove(moveFrom[i]);se.add(moveTo[i]);}ListInteger ans new ArrayList(se);Collections.sort(ans);return ans;}
}Python
from typing import Listclass Solution:def relocateMarbles(self, nums: List[int], moveFrom: List[int], moveTo: List[int]) - List[int]:se set(nums)for from_, to in zip(moveFrom, moveTo):se.remove(from_)se.add(to)return sorted(se)同步发文于CSDN和我的个人博客原创不易转载经作者同意后请附上原文链接哦~ Tisfyhttps://letmefly.blog.csdn.net/article/details/140686910