LeetCode 2766.重新放置石块:哈希表

【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 <= 105
  • 1 <= moveFrom.length <= 105
  • moveFrom.length == moveTo.length
  • 1 <= 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 ) n=len(nums) n=len(nums)
  • 空间复杂度 O ( n ) O(n) O(n)

AC代码

C++
class Solution {
public:vector<int> relocateMarbles(vector<int>& nums, vector<int>& moveFrom, vector<int>& moveTo) {unordered_set<int> stones(nums.begin(), nums.end());for (int i = 0; i < moveFrom.size(); i++) {stones.erase(moveFrom[i]);stones.insert(moveTo[i]);}vector<int> ans(stones.begin(), stones.end());sort(ans.begin(), ans.end());return ans;}
};
Go
package mainimport "sort"func 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 List<Integer> relocateMarbles(int[] nums, int[] moveFrom, int[] moveTo) {Set<Integer> 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]);}List<Integer> 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和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~

Tisfy:https://letmefly.blog.csdn.net/article/details/140686910

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50568.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索AI的未来:看Facebook如何利用人工智能改进用户体验

人工智能&#xff08;AI&#xff09;正以惊人的速度改变各行各业&#xff0c;社交媒体也不例外。作为全球领先的社交平台之一&#xff0c;Facebook正在积极利用AI技术&#xff0c;提升用户体验并推动平台的发展。从个性化推荐到自动化内容审核&#xff0c;AI的应用正在重塑Face…

2024.7.26 作业

1.使用fgets统计给定文件的行号 #include <myhead.h> int main(int argc,const char *argv[]) {if(argc!2){printf("input file error!!!\n");printf("usage:./a.out fileName\n");return -1;}FILE *fpNULL; if( (fpfopen(argv[1],"r"))N…

深入解读 Java 中的 `StringUtils.isNotBlank` 与 `StringUtils.isNotEmpty`

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

每日一题~ Birthday Cake+19浙江省赛 I(字符串哈希,匹配)(哈希判断回文串,奇偶性质的博弈)

添加链接描述 题意&#xff1a; n 个字符串&#xff0c;两两组合&#xff0c;问有几对能形成 AA 串。 n<4e5 。 分析&#xff1a; 符合条件的有两种 1.有多个A 串&#xff0c;对答案的贡献是 cnt*(cnt-1)/2 2.有形如 ABA 的串&#xff0c;这时&#xff0c;我们需要寻找 B 串…

产品架构图的设计如果你能让老板一看明白,那么要恭喜你了!哈哈

产品架构图的设计&#xff1a;如果你能让老板一看明白&#xff0c;那么要恭喜你了&#xff01;哈哈 艾斯视觉观点认为&#xff1a;在产品开发的过程中&#xff0c;架构图是沟通产品设计理念和实现方式的重要工具。它不仅需要清晰地展示产品各组件之间的关系&#xff0c;还要能…

[前端]解决Iframe即使设置高度100%,但还是显示滚动条scrollbar的问题

前言 好烦,你看看这两个重复的滚动条. 一个是来自iframe,另一个来自父级的div(overflow: auto;) 我已经在css中设置了iframe的height: 100%;border: none;,但无论如何还是显示出了父级的scrollbar 解决 将iframe的display: block;即可. 或者vertical-align: bottom;

GIT新手提交操作

1、创建一个本地分支 进入Xshell已经拉取的该项目的项目代码路径下执行git checkout -b 姓名全拼音&#xff0c;例如&#xff1a;git checkout -b xiewei&#xff0c;当前显示已创建。 cuihengyidell-PowerEdge-T550:~/SVN/Git_R11/R11_V4.02.0_Source$ git checkout -b cuih…

【NoSQL数据库】Redis知识小册

一、缓存穿透 缓存穿透是先查Redis&#xff0c;发现缓存中没有数据&#xff0c;再查数据库。然而&#xff0c;如果查询的数据在数据库中也不存在&#xff0c;那么每次查询都会绕过缓存&#xff0c;直接落到数据库上。 解决方案一、缓存空数据 查询Redis缓存&#xff1a;首先查…

微信小程序之调查问卷

一、设计思路 1、界面 调查问卷又称调查表&#xff0c;是以问题的形式系统地记载调查内容的一种形式。微信小程序制作的调查问卷&#xff0c;可以在短时间内快速收集反馈信息。具体效果如下所示&#xff1a; 2、思路 此调查问卷采用服务器客户端的方式进行设计&#xff0c;服…

Kafka快速入门+SpringBoot简单的秒杀案例

1. 主题相关 1.1 创建主题 kafka-topics.sh --create --bootstrap-server [服务器地址] --replication-factor [副本数] --partitions [分区数] --topic [主题名]liberliber-VMware-Virtual-Platform:/home/zookeeper$ docker-compose exec kafka /bin/bash #进入kafka容器 b…

【JavaScript】跨页面通信

Cookie&#xff1a;通过在⻚⾯间共享 Cookie 实现简单的跨⻚⾯通信&#xff0c;但是 Cookie ⼤⼩有限制&#xff0c;不能存储过多的数据。localStorage 和 sessionStorage&#xff1a;HTML5 提供了本地存储的能⼒&#xff0c;可以通过 localStorage 或 sessionStorage 实现⻚⾯…

全网最详细Gradio教程系列5——Gradio Client: python

全网最详细Gradio教程系列5——Gradio Client: python 前言本篇摘要5. Gradio Client的三种使用方式5.1 使用Gradio Python Client5.1.1 安装gradio_client5.1.2 连接Gradio应用程序1. 通过URL连接2. 通过SpaceID连接3. 辅助&#xff1a;duplicate()和hf_token4. Colab Noteboo…

Java 并发编程:一文了解 Java 内存模型(处理器优化、指令重排序与内存屏障的深层解析)

大家好&#xff0c;我是栗筝i&#xff0c;这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 022 篇文章&#xff0c;在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验&#xff0c;并希望进…

使用AI大模型统计英语四六级试题高频词汇

引子 前些年我做过商品搜索&#xff0c;当时为了优化一些搜索词和搜索关联提示&#xff0c;接触到一点NLP的知识。所以后来有一场非全日制的研究生考试&#xff0c;为了高效的复习英语单词&#xff0c;我爬取了往年的历史真题数据&#xff0c;以及其他模拟等各种试题的数据。然…

AcWing最长连续不重复子序列

哈希表就完事儿了&#xff0c;key是a[j],value是a[j]出现次数 i丢到前面&#xff0c;j丢到后面&#xff0c;然后j往后面遍历&#xff0c;每次记录a[j]出现次数 m a p [ a [ j ] ] map[a[j]] map[a[j]]&#xff0c;如果a[j]出现次数2次及其以上 m a p [ a [ j ] ] > 1 map[a[…

《Python 基础方法的奇妙回顾之旅》

1.学习内容 1.1本篇博客主要是学过的方法进行总结: 1.1.1 print&#xff08;&#xff09;方法 print方法是Python中最常用到的方法&#xff0c;print() 方法用于将指定的对象输出到控制台。 语法&#xff1a;print(*objects, sep , end\n, filesys.stdout, flushFalse) o…

Element Plus 动态编辑标签Tag使用@keyup.enter与@Blur冲突问题,

这是官方文档示例代码,文档具体链接https://element-plus.org/zh-CN/component/tag.html 问题描述: 发现存在使用keyup.enter与Blur冲突问题, keyup.enter(就是按回车键)发现handleInputConfirm方法被执行了两次,下面是问题代码 <template> <div class"flex ga…

【数据中心】数据中心的IP封堵防护:构建网络防火墙

在现代数据中心中&#xff0c;IP封堵防护是构建网络防火墙的基石。它通过阻止恶意IP地址的访问&#xff0c;有效防范各种网络攻击。本文将介绍数据中心中IP封堵防护的原理、实施方法及其在网络防火墙中的重要性。 IP封堵防护的原理 IP封堵防护是指根据预定义的策略&#xff0…

PS5测试更新推送自适应充电功能:自带充电器码

原标题&#xff1a;PS5 更新推送自适应充电功能&#xff1a;仅适用于新型号 易采游戏网7月26日消息&#xff1a;近年来&#xff0c;游戏界的科技进步日新月异&#xff0c;各大厂商不断推出新的功能和技术来吸引玩家。作为游戏机市场的领导者之一&#xff0c;索尼的PlayStation…

git 如何撤销提交的日志

前言: 在Git中&#xff0c;如果你已经提交了一个更改并且想要撤销这个提交但保留更改&#xff08;即撤销commit但保留working directory和index中的更改&#xff09;&#xff0c;你可以使用git reset命令。如果你想要撤销commit并且丢弃所有的更改&#xff0c;你可以使用git r…