当前位置: 首页 > news >正文

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

相关文章:

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

【LetMeFly】2766.重新放置石块&#xff1a;哈希表 力扣题目链接&#xff1a;https://leetcode.cn/problems/relocate-marbles/ 给你一个下标从 0 开始的整数数组 nums &#xff0c;表示一些石块的初始位置。再给你两个长度 相等 下标从 0 开始的整数数组 moveFrom 和 moveTo…...

基于STM32的农业大棚温湿度采集控制系统的设计

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 &#x1f91e;大家好&#xff0c;这里是5132单片机毕设设计项目分享&#xff0c;今天给大家分享的是智能教室。 设备的详细功能见网盘中的文章《8、基…...

go语言的命名规则

身为前端为什么去学go语言呢&#xff1f;我认为go在未来可能会给我带来一些收益。自认为收益是去做一件事情不可缺少的因素&#xff0c;就好像是你努力之后得到回报&#xff0c;努力的欲望会越来越强。《Head First Go》这本书里作者有一句话&#xff0c;如果你已经掌握了一门编…...

新增ClamAV病毒扫描功能、支持Java和Go运行环境,1Panel开源面板v1.10.12版本发布

2024年7月19日&#xff0c;现代化、开源的Linux服务器运维管理面板1Panel正式发布了v1.10.12版本。 在这一版本中&#xff0c;1Panel新增了多项实用功能。社区版方面&#xff0c;1Panel新增ClamAV病毒扫描功能、支持Java和Go运行环境&#xff0c;同时1Panel还新增了文件编辑器…...

Windows通过命令查看mac : getmac

要查看本机网卡mac&#xff0c;可以通过ipconfig /all 显示&#xff0c;但输出内容过多 可以通过getmac命令查看 示例 C:\Users\Desktop> getmac物理地址 传输名称暂缺 没有硬件 1C-1B-B5-04-E2-7D \Device\Tcpip_{80096E40-D51D-490C-9AF7-…...

Android笔试面试题AI答之Android系统与综合类(1)

答案仅供参考&#xff0c;来着文心一言、Kimi.ai 目录 1.简述嵌入式实时操作系统&#xff0c;Android 操作系统属于实时操作系统吗?嵌入式实时操作系统简述Android操作系统是否属于实时操作系统 2.简述Android系统的优势和不足&#xff1f;3.简述Android的系统架构 &#xff1…...

【Android】数据存储方案——文件存储、SharedPreferences、SQLite数据库用法总结

文章目录 文件存储存储到文件读取文件 SharedPreferences存储存储获取SharedPreferences对象Context 类的 getSharedPreferences() 方法Activity 类的 getPreferences() 方法PreferenceManager 类中的 getDefaultSharedPreferences() 方法 示例 读取记住密码的功能 SQLite数据库…...

抖音矩阵管理系统功能说明:一站式掌握

在当下这个信息爆炸的时代&#xff0c;抖音作为短视频领域的佼佼者&#xff0c;其用户规模持续扩大&#xff0c;影响力日益增强。对于内容创作者和营销人员来说&#xff0c;如何高效管理抖音账号&#xff0c;实现内容的多平台分发和精准触达&#xff0c;成为了亟待解决的问题。…...

旅游卡使用指南及常见疑问解答

近期&#xff0c;许多朋友对旅游卡的免费旅游政策表示浓厚兴趣&#xff0c;但心中不免存疑&#xff1a;这真的是全程免费&#xff0c;无需自费一分吗&#xff1f; 在此&#xff0c;我们明确告知&#xff1a;免费旅游确实存在&#xff0c;但享受范围与条件需清晰界定。 本文将…...

【MySQL篇】Percona XtraBackup标准化全库完整备份策略(第三篇,总共五篇)

&#x1f4ab;《博主介绍》&#xff1a;✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ &#x1f4ab;《擅长领域》&#xff1a;✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux&#xff0c;也在扩展大数据方向的知识面✌️…...

背单词工具(C++)

功能分析 生词本管理&#xff1a; 创建生词本文件&#xff1a;在构造函数中创建了“生词本.txt”“背词历史.log”“历史记录.txt”三个文件。添加单词&#xff1a;用户可以输入单词、词性和解释&#xff0c;将其添加到生词本中。查询所有单词&#xff1a;展示生词本中所有的单…...

面试八股 | 数据库引擎 | InnoDB和myISAM的区别?

⭐️⭐️⭐️InnoDB和MyISAM的区别? InnoDB &#xff1a; 1、使用的是行锁&#xff0c;操作时候只锁一行数据&#xff0c;不会对其他有影响&#xff0c;适合高并发工作 2、支持事务 3、不仅缓存索引还要缓存真实数据&#xff0c;适合高并发 4、默认安装 5、支持外键 6、…...

GEE计算五种植被指数(NDVI、EVI2、RVI、MTVI2、OSAVI)

目录 计算公式源代码计算公式 源代码 // 定义感兴趣区域(这里以一个简单的矩形区域为例) var region = ee.FeatureCollection("projects/a-flyllf0313/assets/dachang"); // 定义时间范围 var startDate = 2023-04-18; var endDate &...

C/S架构和B/C架构

C/S架构&#xff08;Client/Server Architecture&#xff09;和B/C架构&#xff08;Browser/Client Architecture&#xff09;是两种不同 的软件架构模型&#xff0c;它们各自有不同的特点和应用场景。 一、C/S架构&#xff08;Client/Server Architecture&#xff09; 1. 定…...

音乐曲谱软件Guitar Pro 8.2 for Mac 中文破解版

Guitar Pro 8.2 for Mac 中文破解版是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xff0c;重现喜爱的歌曲或陪伴自己。 Guitar Pro for Mac 是一款功能强大的音乐曲谱软件&#xff0c;非常适合学习如何玩&#xff0c;改进技巧&#xf…...

浅聊Web Storage(localStorage 和 sessionStorage)、cookie的使用场合

Web Storage&#xff08;localStorage 和 sessionStorage&#xff09;、cookie 一、Cookie二、Web StoragelocalStoragesessionStorage与 Cookies 的比较 一、Cookie Cookies 主要用于以下几种情况&#xff1a; 会话管理&#xff08;Session Management&#xff09;: 登录、购…...

C语言输入输出缓冲机制

文章目录 输入输出缓冲机制概述为什么要有缓冲区缓冲区的类型引发缓冲区的刷新 原理实现 输入输出缓冲机制 概述 缓冲区又称为缓存&#xff0c;它是内存空间的一部分。也就是说&#xff0c;在内存空间中预留了一定的存储空间&#xff0c;这些存储空间用来缓冲输入 或者输出的数…...

javaEE-03-cookie与session

文章目录 Cookie创建Cookie获取Cookie更新CookieCookie 生命控制Cookie 有效路径 Session 会话创建和获取sessionSession 域数据的存取Session 生命周期控制浏览器和 Session 之间关联 Cookie Cookie 是服务器通知客户端保存键值对的一种技术,客户端有了 Cookie 后&#xff0c…...

EtherNet/IP转Profinet协议网关(经典配置案例)

怎么样才能把EtherNet/IP和Profinet网络连接起来呢?这几天有几个朋友问到了这个问题&#xff0c;作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题&#xff0c;名为JM-PN-EIP&#xff0c;下面是详细介绍。 一&#xff0c;设备主要功能 1、捷米特J…...

华为云依赖引入错误

问题&#xff1a;记录一次项目加在华为云依赖错误&#xff0c;如下&#xff1a; 错误信息&#xff1a;Could not find artifact com.huawei.storage:esdk-obs-java:pom:3.1.2.1 in bintray-qcloud-maven-repo (https://dl.bintray.com/qcloud/maven-repo/) 找到本地仓库&#…...

快速上手Qwen3-TTS:无需代码,Web界面直接合成10种语言语音

快速上手Qwen3-TTS&#xff1a;无需代码&#xff0c;Web界面直接合成10种语言语音 1. 为什么选择Qwen3-TTS语音合成 语音合成技术正在改变我们与数字世界的交互方式。想象一下&#xff0c;你正在制作一个多语言教学视频&#xff0c;或者开发一个国际化的智能客服系统&#xf…...

北京大学钟亦武老师招收博士生、实习生

点击下方卡片&#xff0c;关注“CVer”公众号AI/CV重磅干货&#xff0c;第一时间送达冲刺今年春招、秋招和实习&#xff01;大家快加入2026年AI校招群&#xff01;赠送今年最大的80元优惠券&#xff0c;大家扫码下方二维码即可加群学习&#xff01;北京大学智能学院介绍&#x…...

【信号处理】基于预设性能的无模型自适应分数阶快速终端滑模控制在MIMO非线性系统中的研究附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

EDK II代码质量门禁报告:全面解析门禁检查结果与最佳实践

EDK II代码质量门禁报告&#xff1a;全面解析门禁检查结果与最佳实践 【免费下载链接】edk2 EDK II 项目地址: https://gitcode.com/gh_mirrors/ed/edk2 EDK II作为现代、功能丰富的跨平台UEFI和PI规范固件开发环境&#xff0c;其代码质量门禁系统是确保固件可靠性和安全…...

Repomix构建流程解析:TypeScript编译与打包的完整指南

Repomix构建流程解析&#xff1a;TypeScript编译与打包的完整指南 【免费下载链接】repomix &#x1f4e6; Repomix (formerly Repopack) is a powerful tool that packs your entire repository into a single, AI-friendly file. Perfect for when you need to feed your cod…...

别再死记硬背公式了!用3Blue1Brown的几何动画,5分钟搞懂行列式到底是啥

用动画解锁行列式的几何直觉&#xff1a;从死记硬背到可视化理解 当你第一次在课本上看到行列式的计算公式时&#xff0c;是否感到困惑——这个看似随意的ad-bc到底意味着什么&#xff1f;为什么它能够决定矩阵是否可逆&#xff1f;传统教学往往让我们陷入计算的泥潭&#xff0…...

STM32HAL库项目实战:我把W5500和MQTTClient库‘缝’起来,实现了阿里云OTA升级前传

STM32HAL库与W5500深度整合&#xff1a;从MQTT云连接到OTA升级的工程实践 在嵌入式设备智能化浪潮中&#xff0c;远程固件升级(OTA)已成为工业设备的标配功能。本文将揭示如何基于STM32HAL库和W5500以太网芯片构建可靠的云连接通道&#xff0c;为后续OTA升级打下坚实基础。不同…...

SEO_2024年最新SEO策略与趋势深度解析(352 )

<h2>2024年最新SEO策略与趋势深度解析</h2> <p>在数字化时代&#xff0c;搜索引擎优化&#xff08;SEO&#xff09;依然是网站流量和品牌影响力的核心驱动力。2024年&#xff0c;随着互联网技术的不断进步&#xff0c;SEO策略和趋势也在不断演变。本文将详细…...

SRS + FFmpeg WebRTC 循环推流环境搭建

SRS FFmpeg WebRTC 循环推流环境搭建指南 本指南介绍如何使用 Docker Compose 快速搭建一个基于 SRS (Simple Realtime Server) 的流媒体测试环境。 推流协议&#xff1a;RTMP (FFmpeg 模拟推流)拉流协议&#xff1a;WebRTC (低延迟播放)特性&#xff1a;视频循环播放、不保存…...

OpenClaw多模型切换实战:百川2-13B量化版与Qwen3-32B对比测试

OpenClaw多模型切换实战&#xff1a;百川2-13B量化版与Qwen3-32B对比测试 1. 为什么需要多模型切换&#xff1f; 去年夏天&#xff0c;当我第一次尝试用OpenClaw自动化处理日常工作时&#xff0c;发现一个有趣的现象&#xff1a;80%的简单任务&#xff08;如文件重命名、邮件…...