数据结构 之map/set练习

文章目录

  • 1. 只出现一次的数字
    • 算法原理:
    • 代码:
  • 2. 随机链表的复制
    • 算法原理:
    • 代码:
  • 3. 宝石与石头
    • 算法原理:
    • 代码:
  • 4. 坏键盘打字
    • 算法原理:
    • 代码:
  • 5. 前K个高频单词
    • 算法原理:
    • 代码:

1. 只出现一次的数字

在这里插入图片描述
原题链接


算法原理:

这里这需要使用一个哈希表
把所有的元素放入到哈希表中,因为哈希表中不能放入重复的元素

代码:

class Solution {public int singleNumber(int[] nums) {HashSet<Integer> set = new HashSet<>();for(int x : nums) {if(!set.contains(x)) {set.add(x);}else {set.remove(x);}}for(int x : nums) {if(set.contains(x)) {return x;}}return -1;}
}

在这里插入图片描述

2. 随机链表的复制

在这里插入图片描述
在这里插入图片描述
原题链接


算法原理:

我们刚看到题一定很懵,但是我们可以画图来看一下,什么叫做复制链表

在这里插入图片描述
两个链表的结构完全一样,但是值不一样
所以我们现在就是看,如何让第二个链表和第一个链表展现出来一样的东西

这个时候我们需要一个哈希表,来把新节点和老节点放入进去
这样我们在new 新的节点的时候,就可以通过一一对应的关系,把老节点对应的关系展现出来
在这里插入图片描述
在这里插入图片描述这个时候
map.get(cur).next = map.get(cur.next)
map.get(cur).random = map.get(cur.random)

代码:

public Node copyRandomList(Node head) {HashMap<Node,Node> map = new HashMap<>();Node cur = head;while (cur != null) {Node node = new Node(cur.val);map.put(cur,node);cur = cur.next;}cur = head;while (cur != null) {map.get(cur).next = map.get(cur.next);map.get(cur).random = map.get(cur.random);cur = cur.next;}return map.get(head);}

在这里插入图片描述

3. 宝石与石头

在这里插入图片描述
原题链接


算法原理:

先把宝石放到哈希表中
再遍历石头,如果哈希表中有这个字母
计数器++
最后返回计数器的值

代码:

public int numJewelsInStones(String jewels, String stones) {int count = 0;HashSet<Character> set = new HashSet<>();for (char ch : jewels.toCharArray()) {set.add(ch);}for (char ch : stones.toCharArray()) {if (set.contains(ch)) {count++;}}return count;}

在这里插入图片描述

4. 坏键盘打字

在这里插入图片描述
在这里插入图片描述
原题链接


算法原理:

要求的输出,只输出大写,并且只输出一次
这个时候,我们先把输入的那一行字母放入到哈希表中
然后再new 一个哈希表
经过对比之后,再把坏键盘的字母放入到哈希表中
这样第二个哈希表中的就是要求的值

代码:

	public static void main(String[] args) {Scanner in = new Scanner(System.in);while (in.hasNextLine()) {String str1= in.nextLine();String str2= in.nextLine();func(str1,str2);}}private static void func(String str1,String str2) {HashSet<Character> set = new HashSet<>();for (char ch : str2.toUpperCase().toCharArray()) {set.add(ch);//把可以输出的键都放入了哈希表}HashSet<Character> set2 = new HashSet<>();for (char ch : str1.toUpperCase().toCharArray()) {if (!set.contains(ch) && !set2.contains(ch)) {System.out.print(ch);set2.add(ch);}}}

在这里插入图片描述

5. 前K个高频单词

在这里插入图片描述
原题链接


算法原理:

  1. 先统计单词出现的次数
  2. 建立小根堆,指定比较的方式
  3. 遍历map 调整优先级队列

注意在建立小根堆的时候需要考虑到前三个单词次数一样的情况下,需要用大根堆来排序

代码:

public List<String> topKFrequent(String[] words, int k) {//1.统计每个单词出现的次数Map<String,Integer> map = new HashMap<>();for (String word : words) {if (map.get(word) == null) {map.put(word,1);}else {int val = map.get(word);map.put(word,val+1);}}//2.建立小根堆,指定比较的方式PriorityQueue<Map.Entry<String,Integer>> minHeap = new PriorityQueue<>(new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {if (o1.getValue().compareTo(o2.getValue()) == 0) {//按照字母顺序建立大根堆return o2.getKey().compareTo(o1.getKey());}return o1.getValue() - o2.getValue();}});//3.遍历map 调整优先级队列for (Map.Entry<String,Integer> entry : map.entrySet()) {if (minHeap.size() < k) {minHeap.offer(entry);}else {Map.Entry<String,Integer> top = minHeap.peek();//如果当前频率相同if (top.getValue().equals(entry.getValue())){//字母顺序小的进来if (top.getKey().compareTo(entry.getKey()) > 0) {minHeap.poll();minHeap.offer(entry);}}else {if (top.getValue().compareTo(entry.getValue()) < 0) {minHeap.poll();minHeap.offer(entry);}}}}List<String> ret = new ArrayList<>();for (int i = 0; i < k; i++) {Map.Entry<String,Integer> top = minHeap.poll();ret.add(top.getKey());}Collections.reverse(ret);return ret;}

在这里插入图片描述

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

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

相关文章

图片的批量建码怎么做?一图一码的制作方法

在使用图片展示内容时&#xff0c;经常会有同一类型的图片信息是有区别的&#xff0c;如果需要将每张图片批量生成二维码图片&#xff0c;那么出了一张一张去制作之外&#xff0c;有没有能够一键批量建码的功能可以解决这个问题呢&#xff1f;下面来给大家分享一下图片批量建码…

SpringBoot 源码解析1:环境搭建

SpringBoot 源码解析1&#xff1a;环境搭建 1.项目结构2.pom.xml3.MyApplication 1.项目结构 最简单的spring-web项目 2.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns…

记删除CK不彻底问题 及 新增表TTL机制

问题背景&#xff1a;对CK表进行删除时&#xff0c;发现无法彻底删除&#xff0c;并报错如下&#xff1a; 同时也会有下面的报错信息&#xff1a; 解决过程&#xff1a; 确认CK 节点是否健康存活&#xff0c;select * from system.clusters 可以查看&#xff1b;确认CK元数据是…

基于ssm日用品网站设计论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本日用品网站就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

linux系统的u盘/mmc/sd卡等的支持热插拔和自动挂载行为

1.了解mdev mdev是busybox自带的一个简化版的udev。udev是从Linux 2.6 内核系列开始的设备文件系统&#xff08;DevFS&#xff09;的替代品&#xff0c;是 Linux 内核的设备管理器。总的来说&#xff0c;它取代了 devfs 和 hotplug&#xff0c;负责管理 /dev 中的设备节点。同时…

openEuler商业化进展可观:累计装机量超610万套,市场持续扩容

12月15日至16日&#xff0c;以“崛起数字时代&#xff0c;引领数智未来”为主题的操作系统大会&#xff06;openEuler Summit 2023在北京国家会议中心举办。大会旨在汇聚全球产业界创新力量&#xff0c;构筑坚实的基础软件根基&#xff0c;推动基础软件技术持续创新&#xff0c…

win10 node-red安装及管理配置

win10 node-red安装及管理配置 一、安装node.js环境二、安装node-red环境2.1 node-red安装2.2 node-red安全登录方式 三、pm2管理node-red服务3.1 安装pm23.2 pm2管理node-red服务 四、常用命令4.1 npm命令4.2 pm2命令 更多 本文旨在详细介绍windows10系统下的node-red开发配置…

visio打出根号,下标,并调整符号的大小

插入公式对象 打出根号和带下标的字母 调整符号大小 把做好的公式符号弄到visio中的图中 ctrla 复制符号 进入visio中粘贴 并 调整大小 调整大小直接拖动边框上的圆点即可。

java SSM酒店客房管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM酒店客房管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代 码和数据库&#xff0c;系统主要采…

在开发微信小程序的时候,报错navigateBack:fail cannot navigate back at firstpage

这个错误的意思是&#xff1a;在这个页面已经是第一个页面了&#xff0c;没办法再返回了 报错原因 这个错误原因其实也简单&#xff0c;就是在跳转的时候使用了wx.redirectTo()&#xff0c;使用wx.redirectTo()相当于重定向&#xff0c;不算是从上一个页面跳转过来的&#xf…

com.sun.org.apache.xerces.internal.impl.dv.util.Base64

com.sun.org.apache.xerces.internal.impl.dv.util.Base64 Access restriction: The type Base64 is not API (restriction on required library D:\Java\jdk1.8.0_341\jre\lib\rt.jar) Maven Update Project 虽然没错误了&#xff0c;但是有警告&#xff0c;好奇&#xff1f;…

python进度条

分享一个进度条python库 瞬间觉得很酷 :)) 它的名字叫tqdm 效果图&#xff1a; 代码&#xff1a; import time from tqdm import tqdmfor i in tqdm(range(100), desc"Loading", unit"kb"):time.sleep(0.1)

中通单号查询,中通快递物流查询,对需要的单号进行备注

批量查询中通快递单号的物流信息&#xff0c;对需要的单号进行备注。 所需工具&#xff1a; 一个【快递批量查询高手】软件 中通快递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;并登录 步骤2&#xff1a;点击主界面左上角的“…

系列一、Linux中安装MySQL

一、Linux中安装MySQL 1.1、下载MySQL安装包 官网&#xff1a;https://dev.mysql.com/downloads/file/?id523327 我分享的&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/188_9RnBYlWVzFb_UJH5aaQ?pwdyyds 提取码&#xff1a;yyds 1.2、上传至/opt目录 & 解压…

Linux Conda 安装 Jupyter

在Linux服务器Conda环境上安装Jupyter过程中遇到了无数的报错&#xff0c;特此记录。 目录 步骤一&#xff1a;安装Anaconda3 步骤二&#xff1a;配置Conda源 步骤三&#xff1a;安装Jupyter 安装报错&#xff1a;simplejson.errors.JSONDecodeError 安装报错&#xff1a;…

什么是第一方数据,如何使用它?

多年来&#xff0c;第一方数据一直是营销行业的话题。 随着用户数据隐私法律法规的不断收紧&#xff0c;营销人员必须接受一个几乎没有数据 cookie 的世界。 我们必须在如何合法和合乎道德地获取客户信息方面更具创造性。 不确定什么是第一方数据&#xff1f;或者不太确定从…

[python][plotly]利用plotly绘制散点图

import plotly.express as px import pandas as pd# 创建示例数据 data pd.DataFrame({x: [1, 2, 3, 4, 5],y: [5, 4, 3, 2, 1] })# 使用 plotly.express 绘制散点图 fig px.scatter(data, xx, yy, titleScatter plot) fig.show() 结果&#xff1a;

【DataSophon】大数据管理平台DataSophon-1.2.1基本使用

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

C#上位机与欧姆龙PLC的通信01----项目背景

最近&#xff0c;【西门庆】作为项目经理负责一个70万的北京项目&#xff0c;需要在工控系统集成软件开发中和欧 姆龙PLC对接&#xff0c;考虑项目现场情况优先想到了采用FinsTCP通讯协议&#xff0c;接下来就是记录如何一步步实现这些通讯过程的&#xff0c;希望给电气工程师&…

塑料检查井产品设计合理、座盖联合周密,为安装维护带来方便

塑料检查井作为一种新型的检查井材料&#xff0c;其产品设计合理、座盖联合周密&#xff0c;为安装维护带来了极大的方便。 首先&#xff0c;塑料检查井的设计合理&#xff0c;能够满足各种工程需求。其结构紧凑、尺寸精确&#xff0c;可以方便地与管道和其他设施进行连接和安…