算法训练 第二周

news2024/12/26 9:20:22

一、赎金信

在这里插入图片描述
本题给出了两个字符串ransomNote和magazine,需要让我们判断ransomNote中的字符能不能由magazine中的字符构成,也就是说我们需要将所有ransomNote中的字符找到一个在magazine中与这个字符相同的字符,且每个字符只能使用一次,这主要考查了我们对hash表的应用。

1.数组模拟hash表

我们先创建一个大小为26的int数组arr,然后遍历magazine中的每个字符,将每个字符的ascll码值减去97后作为数组arr的下标,将此下标对应的值加一,然后再遍历ransomNote中的字符,将每个字符的ascll码值减去97后作为数组arr的下标,将此下标对应的值减一,如果减一之后这个值小于0那么就说明magazine中没有对应的字符与之匹配,直接返回false,如果遍历完ransomNote就说明它可以由magazine中的字符构成,直接返回true,具体代码如下:

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        int[] arr = new int[26];
        for(int i = 0; i < magazine.length(); i++){
            arr[Integer.valueOf(magazine.charAt(i)) - 97]++;
        }
        for(int i = 0; i < ransomNote.length(); i++){
            arr[Integer.valueOf(ransomNote.charAt(i)) - 97]--;
            if(arr[Integer.valueOf(ransomNote.charAt(i)) - 97] < 0){
                return false;
            }
        }
        return true;
    }
}

复杂度分析

  • 时间复杂度:O(m+n),其中 m 是字符串 ransomNote 的长度,n 是字符串 magazine 的长度。
  • 空间复杂度:O(1),因为本题只需要创建的额外数组大小为26,是常数阶。

2.hashmap

我们也可以用java自带的hashmap来实现这个过程,具体代码如下:

class Solution {
    public boolean canConstruct(String ransomNote, String magazine) {
        HashMap<Character,Integer> map = new HashMap<>();
        for(int i = 0; i < magazine.length(); i++) {
            if(!map.containsKey(magazine.charAt(i))) {
                map.put(magazine.charAt(i),1);
            } else {
                map.put(magazine.charAt(i),map.get(magazine.charAt(i)) + 1);
            }
        }
        for(int i = 0; i < ransomNote.length(); i++) {
            if(map.containsKey(ransomNote.charAt(i)) && map.get(ransomNote.charAt(i)) > 0) {
                map.put(ransomNote.charAt(i),map.get(ransomNote.charAt(i)) - 1);
            } else {
                return false;
            }
        }
        return true;
    }
}
  • 时间复杂度:O(m+n)。
  • 空间复杂度:O(1)。

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

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

相关文章

openssl websockets

1. HTTPS通信的C实现 - 知乎

【干货】Anaconda导出环境配置文件

【干货 | 项目导出安装环境要求】 方法yml文件req.txt文件 参考 方法 yml文件 激活虚拟环境&#xff08;fyp是我的虚拟环境名称&#xff0c;请根据你自己的名称进行修改&#xff09; conda activate fyp运行此代码 conda env export > environment.ymlreq.txt文件 激活…

runtime过程中,常见jar问题解决

io.netty java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.<init>此类问题报错&#xff0c;主要是io.netty 多个jar 冲突导致。、 使用以下命令查看同一个jar 有哪些版本 mvn dependency:resolve -Dclassifiersources对一些不愿意引入的依赖加上…

VIGC:自问自答,高质量视觉指令微调数据获取新思路

从今年四月份开始&#xff0c;随着MiniGPT-4, LLaVA, InstructBLIP等多模态大模型项目的开源&#xff0c;大模型的火从NLP领域烧到了计算机视觉及多模态领域。 多模态大模型需要高质量的图文对话数据进行指令微调&#xff0c;而当前多模态指令微调数据多基于纯文本GPT-4构建&am…

【Purple Pi OH RK3566鸿蒙开发板】OpenHarmony音频播放应用,真实体验感爆棚!

本文转载于Purple Pi OH开发爱好者&#xff0c;作者ITMING 。 原文链接&#xff1a;https://bbs.elecfans.com/jishu_2376383_1_1.html 01注意事项 DevEco Studio 4.0 Beta2&#xff08;Build Version: 4.0.0.400&#xff09; OpenHarmony SDK API 9 创建工程类型选择Appli…

华为云云耀云服务器L实例评测 | 部署H5 一起来吃月饼游戏

文章目录 前言一、云服务器相对传统服务器有什么优势1.1、可伸缩性&#xff08;Scalability&#xff09;1.2、灵活性&#xff08;Flexibility&#xff09;1.3、高可用性&#xff08;High Availability&#xff09;1.4、备份和恢复&#xff08;Backup and Recovery&#xff09;1…

Golang Gorm 创建HOOK

创建的时候&#xff0c;在插入数据之前&#xff0c;想要做一些事情。钩子函数比较简单&#xff0c;就是实现before create的一个方法。 package mainimport ("gorm.io/driver/mysql""gorm.io/gorm" )type Student struct {ID int64Name string gorm:&q…

redis深度历险 千帆竞发 —— 分布式锁

分布式应用进行逻辑处理时经常会遇到并发问题。 比如一个操作要修改用户的状态&#xff0c;修改状态需要先读出用户的状态&#xff0c;在内存里进行修改&#xff0c;改完了再存回去。如果这样的操作同时进行了&#xff0c;就会出现并发问题&#xff0c;因为读取和保存状态这两个…

AUTOSAR-存储基础知识

1、存储基础知识 RAM 又称随机存取存储器&#xff0c;存储单元的内容可以按照需要随机取出或者存入&#xff0c;存取数据比较快。这种存储器在断电时&#xff0c;会丢失其存储内容&#xff0c;所以一般是 CPU运行时会把程序从 ROM 拷贝到 RAM 里面执行。所以一般 RAM 是作为和…

软件测试公式之如何高质量的做BUG分析?

对于BUG分析&#xff0c;测试人员再熟悉不过了。但如果是面对大量的BUG&#xff0c;要如何有效的分析呢&#xff1f;有什么好的方案和行动项&#xff1f;今天聊聊这个话题。 01 BUG分析简单可以分为两类&#xff1a;宏观BUG分析 和 微观BUG分析。 宏观BUG分析&#xff1a;在…

六、线程池的编写与解析 —— TinyWebServer

六、线程池的编写与解析 —— TinyWebServer 一、前言 经过上次数据库连接池的书写&#xff0c;大家也应该明白池的编写。 这里说一下不同点&#xff0c;和一些要注意的点。 为什么使用模板&#xff1f;为什么不用单例模式了&#xff1f;这里的线程池扮演的角色是什么&#x…

【PowerQuery】PowerBI 手动刷新数据内容

PowerBI的手动刷新方式和Excel基本一样&#xff0c;我们通过刷新数据源来实现数据的手动刷新&#xff0c;当然PowerBI 和Excel一样存在着单数据源刷新和全局数据源刷新两个操作。如果希望刷新单个数据源&#xff0c;我们可以在数据字段进行数据的刷新&#xff0c;具体的操作步骤…

阈值回归模型(Threshold Regression Model)及R实现

阈值回归模型是一类回归模型&#xff0c;其中预测变量与结果以阈值依赖的方式相关联。通过引入一个阈值参数&#xff08;也称为转折点&#xff09;&#xff0c;阈值回归模型提供了一种简单而优雅、可解释的方法来建立结果和预测变量之间某些非线性关系的模型。在生物医学领域中…

Pyramid Scene Parsing Network–CVPR,2017论文解读及其pytorch代码

文章目录 Pyramid Scene Parsing Network--CVPR&#xff0c;2017一、背景介绍二、网络结构和优化方法三、实验结果 Pyramid Scene Parsing Network–CVPR&#xff0c;2017 Github代码链接 一、背景介绍 现阶段随着数据集制作精细化、标签种类变多、具有语义相似标签等导致出…

继承的笔记

继承 对象代表什么, 就得封装对应的数据, 并提供数据对应的行为 对于两种不同的类, 但是具有很多共同的属性的时候我们就想着用继承, 我们可以将共同的属性放置在一个类中, 然后, 只需要新建两个类, 继承共有的类, 然后单独写自己的属性特点 继承类 Java 中提供了一个关键字…

Hadoop-Hbase

1. Hbase安装 1.1 安装zookeeper、 hbase 解压至/opt/soft&#xff0c;并分别改名 配置环境变量并source生效 #ZK export ZOOKEEPER_HOME/opt/soft/zk345 export PATH$ZOOKEEPER_HOME/bin:$PATH #HBASE_HOME export HBASE_HOME/opt/soft/hbase235 export PATH$HBASE_HOME/b…

【OS】操作系统课程笔记 第三章 进程管理

3.1 多道程序设计 吞吐率&#xff1a;衡量一个系统效率的一个指标 采用多道程序设计可以显著提高吞吐率&#xff1a; 但是&#xff0c;并不是内存程序数量越多越好&#xff0c;下面有三点否定&#xff1a; 内存的容量限制了系统可同时处理程序的数目设备数量有限程序道数过多…

✔ ★ 算法基础笔记(Acwing)(三)—— 搜索与图论(17道题)【java版本】

搜索与图论 1. DFS1. 排列数字(3分钟)2. n-皇后问题 2. BFS&#xff08;队列&#xff09;1. 走迷宫二刷总结&#xff08;队列存储一个节点pair<int,int>&#xff09;三刷总结 走过的点标记上距离(既可以记录距离&#xff0c;也可以判断是否走过) ★ ★ 例题2. 八数码二刷…

离线安装PX4日志分析工具Flight Review

使用Flight Review在线分析日志&#xff0c;有时会因为网络原因无法使用 使用离线安装的方式使用Flight Review&#xff0c;可以在无需网络的情况下使用Flight Review sudo apt-get install sqlite3 fftw3 libfftw3-devsudo apt-get install libatlas3-basegit clone --recur…

【Linux核心宝典】Linux 系统目录结构详解 - 01

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…