題目:
給你一個(gè)下標(biāo)從 0 開(kāi)始的整數(shù)數(shù)組 nums 扯躺,表示一些石塊的初始位置奖蔓。再給你兩個(gè)長(zhǎng)度 相等 下標(biāo)從 0 開(kāi)始的整數(shù)數(shù)組 moveFrom 和 moveTo 。
在 moveFrom.length 次操作內(nèi)钥弯,你可以改變石塊的位置宪彩。在第 i 次操作中魔市,你將位置在 moveFrom[i] 的所有石塊移到位置 moveTo[i] 。
完成這些操作后赵哲,請(qǐng)你按升序返回所有 有 石塊的位置待德。
注意:
如果一個(gè)位置至少有一個(gè)石塊,我們稱(chēng)這個(gè)位置 有 石塊枫夺。
一個(gè)位置可能會(huì)有多個(gè)石塊将宪。
示例 1:
輸入:nums = [1,6,7,8], moveFrom = [1,7,2], moveTo = [2,9,5]
輸出:[5,6,8,9]
解釋?zhuān)阂婚_(kāi)始,石塊在位置 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 有石塊强挫。
最后岔霸,至少有一個(gè)石塊的位置為 [5,6,8,9] 。
示例 2:
輸入:nums = [1,1,3,3], moveFrom = [1,3], moveTo = [2,2]
輸出:[2]
解釋?zhuān)阂婚_(kāi)始俯渤,石塊在位置 [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 <= 10^5
1 <= moveFrom.length <= 10^5
moveFrom.length == moveTo.length
1 <= nums[i], moveFrom[i], moveTo[i] <= 10^9
測(cè)試數(shù)據(jù)保證在進(jìn)行第 i 步操作時(shí)渊涝,moveFrom[i] 處至少有一個(gè)石塊。
java代碼:
class Solution {
public List<Integer> relocateMarbles(int[] nums, int[] moveFrom, int[] moveTo) {
Set<Integer> s = new HashSet();
for (int num: nums) s.add(num); // 加入初始石頭
for (int i = 0; i < moveFrom.length; ++i) { // 移動(dòng)石頭
s.remove(moveFrom[i]);
s.add(moveTo[i]);
}
return s.stream().sorted().toList(); // 返回答案
}
}