【数据结构练习题】Map与Set——1.只出过一次的数字2.复制带随机指针的链表3.宝石与石头4.坏键盘打字

在这里插入图片描述
♥♥♥♥♥个人主页♥♥♥♥♥
♥♥♥♥♥数据结构练习题总结专栏♥♥♥♥♥
♥♥♥♥♥【数据结构练习题】堆——top-k问题♥♥♥♥♥

文章目录

  • 1.只出过一次的数字
    • 1.1问题描述
    • 1.2思路分析
    • 1.3绘图分析
    • 1.4代码实现
    • 2.复制带随机指针的链表
    • 2.1问题描述
    • 2.2思路分析
    • 2.3绘图分析
    • 2.4代码实现
      • 3.宝石与石头
    • 3.1问题描述
    • 3.2思路分析
    • 3.3绘图分析
    • 3.4代码实现
        • 4.坏键盘打字
    • 4.1问题描述
    • 4.2思路分析
    • 4.3绘图分析
    • 4.4代码实现

1.只出过一次的数字

1.1问题描述

给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

1.2思路分析

这个题我们有两种方式来解决这个问题,一个就是用异或来解决这个问题还有就是用Set集合来解决这个问题,这里我们用Set集合来解决这个问题。
Set集合有一个特点就是具备查重性,我们就可以利用这个特点来解决这个问题
第一步:先遍历数组
第二步:判断当前Set集合有没有这个遍历的元素,没有则添加到这个Set集合中,有则删除Set集合中这个元素
第三步:当数组遍历完之后,Set集合中剩下的元素就是只出现过一次的元素。

1.3绘图分析

在这里插入图片描述

1.4代码实现

public int singleNumber(int[] nums) {Set<Integer> set = new HashSet();for (int i = 0; i < nums.length; i++) {// 判断set集合中是否含有nums[i]if (!set.contains(nums[i])) {set.add(nums[i]);} else {set.remove(nums[i]);}}// 此时set集合中只剩下只出现了一次的元素for (int i = 0; i < nums.length; i++) {if (set.contains(nums[i])) {return nums[i];}}return -1;}

2.复制带随机指针的链表

2.1问题描述

给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。
构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点 。
上述描述了一堆文字,其实意思很简单就是复制一个与原链表大小规格,内容相同的链表即可。

2.2思路分析

这里我们需要用到Map中的key-value模型来解决这个问题
第一步:遍历原链表,并且同时创建以恶搞相同规格的链表,将原链表的结点和新链表的结点利用key-value模型的形式存储在Map中。
第二步:再遍历一次链表,通过Map中的get方法将新链表中的结点构成联系。

2.3绘图分析

在这里插入图片描述

2.4代码实现

  public Node copyRandomList(Node head) {Map<Node,Node> map = new HashMap<>();//1.第一次遍历原链表Node cur1 = head;while(cur1 != null) {//创建的新结点Node node = new Node(cur1.val);map.put(cur1,node);cur1 = cur1.next;}//2.第二次遍历原链表Node cur2 = head;while(cur2 != null) {map.get(cur2).next = map.get(cur2.next);map.get(cur2).random = map.get(cur2.random);cur2 = cur2.next;}return map.get(head);}

3.宝石与石头

3.1问题描述

给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。 stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
意思就是在石头中找宝石的个数。

3.2思路分析

本质上还是一个查重问题,我们可以用Set集合来解决这个问题
第一步:我们将宝石数组中的宝石通过遍历的方式放在Set集合中。
第二步:遍历石头数组,与Set集合中的宝石比较相同即计数器+1

3.3绘图分析

在这里插入图片描述

3.4代码实现

 public int numJewelsInStones(String jewels, String stones) {Set<Character> set = new HashSet();int count = 0;for (int i = 0; i < jewels.length(); i++) {char ch = jewels.charAt(i);set.add(ch);}for (int i = 0; i < stones.length(); i++) {//比较char ch = stones.charAt(i);if(set.contains(ch)) {count++;}}return count;}
4.坏键盘打字

4.1问题描述

旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。

4.2思路分析

这还是一个Set查重问题。
第一步:遍历实际输出的字符串数组将其中的元素放入Set集合中
第二步:接着遍历期望输出的字符串数组与Set集合比较,不相同则放入一个新的Set集合中setBorken,相同则不需要放入。

4.3绘图分析

在这里插入图片描述

4.4代码实现

import java.util.Scanner;
import java.util.HashSet;
import java.util.Set;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseString str1 = in.nextLine();String str2 = in.nextLine();func(str1, str2);}}private static void func(String str1, String str2) {Set<Character> set = new HashSet<>();for (char s : str2.toUpperCase().toCharArray()) {set.add(s);}Set<Character> setBroken = new HashSet<>();for (char s : str1.toUpperCase().toCharArray()) {if (!set.contains(s) && !setBroken.contains(s)) {System.out.print(s);setBroken.add(s);}}}
}

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

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

相关文章

远程点击没反应

目录 todesk远程登录后点击没反应 解决方法&#xff1a; 方法1 快捷键&#xff1a; 方法2 界面点击Ctrl Alt Delete todesk&#xff0c;向日葵远程登录后点击没反应 todesk远程登录后点击没反应 解决方法&#xff1a; 方法1 快捷键&#xff1a; Ctrl Alt Delete 方法…

《解锁数字化劳动合同签约:构建高效的电子合同签约平台》

随着数字化转型的推进&#xff0c;传统的纸质劳动合同签约方式已经无法满足现代企业对于效率和便捷性的需求。电子劳动合同签约平台应运而生&#xff0c;为企业和员工提供了一种更加高效、便捷的合同签署方式。本文将介绍电子劳动合同签约平台的业务架构&#xff0c;探讨其如何…

ORA-28575: unable to open RPC connection to external procedure agent

环境&#xff1a; Oracle 11.2.0.4x64 RAC AIX6.1版本SDE for aix oracle11g版本10.0 x64 sde配置情况如下&#xff1a; 检查oracle和grid用户下的$ORACLE_HOME/hs/admin/extproc.ora文件均包含有如下&#xff1a; SET EXTPROC_DLLSANY 两个节点sde下的user_libraries都正常…

如何利用ChatGPT辅助下处理:ENVI、GEE、Python等遥感数据

遥感技术主要通过卫星和飞机从远处观察和测量我们的环境&#xff0c;是理解和监测地球物理、化学和生物系统的基石。ChatGPT是由OpenAI开发的最先进的语言模型&#xff0c;在理解和生成人类语言方面表现出了非凡的能力。本课程重点介绍ChatGPT在遥感中的应用&#xff0c;人工智…

CentOS 8.5 安装配置 squid 6.9 代理服务器 Windows10 系统设置http代理 详细教程

1 下载地址: 官网下载 2 通过xftp等方式上传到服务器 #查看环境 [rootlocalhost ~]# cat /etc/redhat-release CentOS Stream release 8 [rootlocalhost ~]# uname -a Linux localhost.localdomain 4.18.0-552.el8.x86_64 #1 SMP Sun Apr 7 19:39:51 UTC 2024 x86_64 x86_6…

自动驾驶中的神经辐射场:综述

24年4月清华大学论文“Neural Radiance Field in Autonomous Driving: A Survey”。 神经辐射场&#xff08;NeRF&#xff09;由于其固有的优势&#xff0c;特别是其隐式表示和新视图合成能力&#xff0c;引起了学术界和工业界的广泛关注。 随着深度学习的快速发展&#xff0c…

YOLOv8项目使用说明

1. 下载群公告中的百度云连接&#xff0c;得到一个压缩文件 2. 解压并使用相关软件&#xff08;如pycharm、VSCode等&#xff09;打开 3. 选择一个合适的模型yaml文件&#xff0c;及数据集yaml文件进行训练 4. 配置并填入数据集yaml文件 5. 运行即可

JAVA 标准接口返回与i18n国际化配置

不喜欢废话直接上代码 标准通用返回 package com.luojie.common;import com.luojie.common.inter.ResponseCommon; import lombok.Data;Data public class ResponseCommonImpl implements ResponseCommon {int code;String msg;Object entity; }package com.luojie.common;im…

[muduo网络库]——muduo库三大核心组件之EventLoop类(剖析muduo网络库核心部分、设计思想)

接着上一节[muduo网络库]——muduo库三大核心组件之 Poller/EpollPoller类&#xff08;剖析muduo网络库核心部分、设计思想&#xff09;&#xff0c;我们来剖析muduo库中最后一类核心组件&#xff0c;EventLoop类。 先回顾一下三大核心组件之间的关系。 接着我们进入正题。 Ev…

SpringBoot内置插件的使用(jackson和lombok)

文章目录 引言I lombok(自动为属性生成构造器)II jacksonsee also引言 idea2021.2.2 已经捆绑安装jackson和lombok插件 I lombok(自动为属性生成构造器) Lombok能通过注解的方式,在编译时自动为属性生成构造器、getter/setter、equals、hashcode、toString方法。 https://p…

Spring Cloud Gateway详解

文章目录 Gateway搭建路由&#xff08;route&#xff09;断言&#xff08;Predicate &#xff09;自定义断言 过滤器&#xff08;filter&#xff09;自定义全局过滤器 引言 在传统的单体项目中&#xff0c;前端和后端的交互相对简单&#xff0c;只需通过一个调用地址即可实现。…

【C语言题解】用函数来模拟实现strlen()、strcpy()、strcmp()、strcat()

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ 学习了函数后&#xff0c;老师让我们用函数来实现上面这四个字符串函数。 我们首先来了解一下这四个字符串函数&#xff1a; 1.strlen函数 用于获取字符串长度&#xff08;不包括末尾…

每日OJ题_贪心算法四②_力扣435. 无重叠区间

目录 力扣435. 无重叠区间 解析代码 力扣435. 无重叠区间 435. 无重叠区间 难度 中等 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 示例 1: 输入: intervals [[1,2]…

IDEA安装使用Git

IDEA安装使用Git 1 Git下载与安装 2 在IDEA中使用Git 2.1 IDEA中配置Git 在IDEA中使用Git&#xff0c;本质上还是使用本地安装的Git软件&#xff0c;所以需要在IDEA中配置Git。 2.2 在IDEA中使用Git 2.2.1 获取Git仓库 在IDEA中使用Git获取仓库有两种方式: 本地初始化仓库从…

CentOS7 安装 Kamailio

https://www.kamailio.org/wiki/packages/rpms 官方文档说 yum -y install yum-utils yum-config-manager --add-repo https://rpm.kamailio.org/centos/kamailio.repo 但目前这样其实行不通 需要这样做&#xff1a; yum install --disablerepokamailio --enablerepokamai…

数据库出现死锁的解决方法参考

死锁引起的原因一般是多个用户并发访问数据库导致的问题&#xff0c;或是因为某个进程挂死以后资源未释放导致的。通过onstat –p可查看deadlks项大于0即表示历史总计死锁次数。对于被锁的表进行操作的时候会出现-143 ISAM error: deadlock detected的错误。当其他会话访问此表…

从JSON数据到Pandas DataFrame:如何解析出所需字段

目录 一、引言 二、JSON数据的基本结构 三、使用Pandas从JSON数据中读取数据 四、从DataFrame中解析出所需字段 解析对象字段 解析嵌套对象字段 解析数组字段 五、案例与代码示例 六、总结 一、引言 在数据分析和处理的日常工作中&#xff0c;我们经常需要从各种…

UBoat:一款功能强大的HTTP Botnet学习与研究工具

关于UBoat UBoat是一款功能强大的HTTP Botnet概念验证工具&#xff0c;该工具支持复刻一个现实场景中完整功能的Botnet测试环境&#xff0c;广大研究人员可以利用UBoat深入学习和研究Botnet的工作机制&#xff0c;以此来提升安全检测和保护策略。 功能介绍 1、基于C开发&…

luceda ipkiss教程 70:合并GDS版图

通过代码拼版&#xff1a; 所有代码如下&#xff1a; from si_fab import all as pdk from ipkiss3 import all as i3class Design1(i3.GDSCell):def _default_filename(self):return "Ring_Test.gds"def _default_name(self):return "Design1"class Des…

VTK官方例子

VTK官方例子 vtkMutableDirectedGraph #!/usr/bin/env python# noinspection PyUnresolvedReferences import vtkmodules.vtkInteractionStyle # noinspection PyUnresolvedReferences import vtkmodules.vtkRenderingOpenGL2 from vtkmodules.vtkCommonColor import vtkName…