【C++】 —— 笔试刷题day_22

一、添加字符

题目解析

在这里插入图片描述

这道题,给定两个字符串AB,字符串A的长度要小于B的长度;

现在我们要对A字符串添加字符,使得A字符串长度等于B字符串的长度,并且要求对应位置的字母尽量相等,然后求出来不相等的字符最少有多少位。

算法思路

对于这道题而言,我们可以在A字符串的开头和结尾位置添加字符(那我们添加的字符肯定是和B字符串对应位置的字符相等的),所以我们就只需要在B字符串中找到一段区间(这个区间的长度等于A的长度,然后让这个区间内的字符尽可能和A字符串对应字符相等)。

看到这里,可能会想到滑动窗口、双指针算法来找更加高效的方法;

但这道题,B字符串的长度小于等于50A字符串的长度小于等于B的长度,我们使用暴力解法即可。

暴力解法:

遍历B字符串,找以每一个位置为开始,长度等于A的长度的子串,然后找到不相等的字符最少的,记录一下结果即可。

代码实现

这里注意:假设A字符串的长度为nB字符串的长度为m

遍历B字符串时,我们要找i位置后面的n个字符,所以我们遍历到m-n位置即可

#include <iostream>
using namespace std;int main() {string str1, str2;cin >> str1 >> str2;int n = str1.size();int m = str2.size();int ret = m;for (int i = 0; i < m - n + 1; i++) {//从0位置遍历到m-n位置int tmp = 0;//记录以i位置开始for (int j = 0; j < n; j++) {if (str1[j] != str2[i + j])tmp++;}ret = min(ret, tmp);}cout << ret << endl;return 0;
}

二、数组变换

题目解析

在这里插入图片描述

题目给定一个数组,现在呢,我们要将数组中的所有数相等;

我们可以进行的操作:将数组中的一个数改为这个数的两倍(说白了就是进行乘2操作

这个操作没有次数限制,可以使用也可以不使用,让我们判断给定的数组能否通过乘2操作将所有数变成一样的。

算法思路

这道题,首先的问题就是:我们如何去判断给定的数组是否能够将所有数变成一样的。

首先,肯定就是,暴力枚举,枚举出来所以的两个数的组合,然后依次判断这两个数能否通过操作变成一样的数。

这道题数据个数是小于50的,暴力枚举也可能可以通过;

但是我们进行一下优化:

  • 我们知道进行乘2操作时,这个数是一直在变大的,所以如果整个数组中的所有数是可以变成一样的,那是不是可以理解为我们可以将所有数通过乘2操作,变成最大的那一个数。(如果无法变成最大的那一个数,那无论多少次操作都是不能变成同一个数的)。
  • 那我们就可以记录一下整个数组中最大的数num,然后遍历数组,判断每一个数能否通过乘2操作变成最大的数即可

那现在我们的问题就来到了如何去判断一个数,能否通过乘2操作变成另外一个数。

我们仔细想一下,如果x可以通过乘2操作变成y,那是不是说yx2^n倍?

我们乘2操作2,4,8,16,32......,这些都是2^n,这里如果x等于y,那y就是x1(2^0)。

那也就是y/x是一个2^n

那我们的问题就变成了判断一个数的2^n

这里暴力就是通过/2操作判断y/x每次/2的商是否是2的倍数。

这里介绍两种判断一个数是否是2^n次方的 方法:

  • x - (x & -x):如果x - (x & -x) == 0,那x就是2^n;否则就不是。
  • x & (x - 1):如果x & (x - 1) == 0,那x就是2^n;否则就不是。

在这里插入图片描述

代码实现

#include <iostream>
using namespace std;
const int N = 51;
int n;
int arr[N];
int num = 0;
bool fun()
{//判断是否能转换for(int i = 0;i<n;i++){if(num % arr[i] != 0)return false;int b = num/arr[i];//判断b是否是2的n次方//if(b - (b&-b)!=0)  return false;if(b & (b-1) !=0)   return false;}return true;
}
int main() {cin>>n;for(int i = 0;i<n;i++){cin>>arr[i];num = max(num,arr[i]);}if(fun()) cout<<"YES"<<endl;else cout<<"NO"<<endl;return 0;
}

三、装箱问题

题目解析

在这里插入图片描述

这道题,给一个箱子的容量v,和n个物品,和每一个物品的体积;

现在我们要在这n个物品中选择体积不超过v的物品,然后要求箱子的剩余空间最小。

算法思路

有系统学习过动态规划,或者了解过01背包问题,相比已经想到这道题思路了;

这道题就是01背包的一个应用。

题目要求我们箱子的剩余容量最小,我们反过来理解,就是我们在n个物品中选择体积不超过v的物品,然后要选择物品的总体积最大。

那这道题就简单了。思路就是动态规划-01背包

状态表示: dp[i][j]表示从n个物品中选择体积不超过j是物品,所选择物品总体积的最大值。

状态转移方程:

  • 对于i位置的物品,我们可以选择它,也可以不选择它;
  • 如果选择i位置的物品,dp[i][j] = dp[i-1][j-arr[i]] + arr[i]。(选择i物品,那就要从剩下的i-1位置中选择体积不超过j - arr[i]的物品;这里还要注意能不能选择i位置的问题)
  • 如果不选择i位置的物品,dp[i][j] = dp[i-1][j]。(不选择i位置的物品,那就要从剩下的i-1位置中选择体积不超过j的物品)。

这里如果i位置物品的体积大于j,那一定是不能选择i位置的。

在这里插入图片描述

代码实现

#include <iostream>
using namespace std;
const int N = 35;
const int M = 2e4+10;
int arr[N];
int dp[N][M];
int n,v;
int main()
{cin>>v>>n;for(int i = 1;i<=n;i++){cin>>arr[i];}for(int i = 1;i<=n;i++){for(int j = 1;j<=v;j++){dp[i][j] = dp[i-1][j];if(j>=arr[i])dp[i][j] = max(dp[i][j], dp[i-1][j-arr[i]] + arr[i]);}}cout<<(v - dp[n][v])<<endl;return 0;
}

到这里本篇文章内容就结束了
感谢各位的支持

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

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

相关文章

错误: 找不到或无法加载主类 HelloWorld,cmd窗口,java命令,提示

错误: 找不到或无法加载主类 HelloWorld 解决办法 检查classpath是否 .; 开头的

手撕LLM(五):从源码出发,探索多模态VL模型的推理全流程

前面我们分享了关于大语言模型的相关技术&#xff0c;包括前向推理、LoRa挂载、MoE模型、模型预训练等&#xff1b;后续还是会基于MiniMindLM模型继续分享关于大语言模型的SFT指令微调、LoRa微调、基于人类偏好的强化学习微调以及模型蒸馏相关的技术&#xff0c;请大家持续关注…

关于隔离2:ADC芯片

ADC可以称作是模拟芯片领域的明珠。作为一种关键器件&#xff0c;ADC设计难度大&#xff0c;专利墙高&#xff0c;所以国内一直处于追赶的状态。近年来&#xff0c;国产ADC发展极为迅速&#xff0c;逐渐在各项参数上赶上了国际主流水准。 模拟数字转换器ADC连接着现实模拟世界…

【MySQL】前缀索引、索引下推、访问方法,自适应哈希索引

最左前缀原则 对于INDEX(name, age)来说最左前缀可以是联合索引的最左N个字段, 也可以是字符串索引的最左M个字符。 SELECT * FROM t WHERE name LIKE 张%其效果和单独创建一个INDEX(name)的效果是一样的若通过调整索引字段的顺序, 可以少维护一个索引树, 那么这个顺序就是需要…

【Oracle专栏】Oracle中的虚拟列

Oracle相关文档&#xff0c;希望互相学习&#xff0c;共同进步 风123456789&#xff5e;-CSDN博客 1.背景 在EXP方式导出时&#xff0c;发现 出现如下提示 EXP-00107: virtual column 不支持&#xff0c;因此采用expdp方式导出。于是本文针对oracle虚拟列进行简单介绍。 2. 相…

Nacos深度剖析与实践应用之-配置中心

&#x1f4f9; 简介 在微服务架构中&#xff0c;配置管理是至关重要的基础能力。Nacos作为阿里巴巴开源的一体化动态服务发现、配置管理和服务管理平台&#xff0c;其配置中心模块提供了统一配置管理、动态配置推送、多环境支持等核心能力。相比传统配置文件方式&#xff0c;Na…

gma 2.1.4 (2025.04.18) | GmaGIS V0.0.1a3 更新日志

安装 gma 2.1.4 pip install gma2.1.4网盘下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1P0nmZUPMJaPEmYgixoL2QQ?pwd1pc8 提取码&#xff1a;1pc8 注意&#xff1a;此版本没有Linux版&#xff01; 编译gma的Linux虚拟机没有时间修复&#xff0c;本期Linux版继…

在 Node.js 中设置响应的 MIME 类型

在 Node.js 中设置响应的 MIME 类型是为了让浏览器正确解析服务器返回的内容&#xff0c;比如 HTML、CSS、图片、JSON 等。我们通常通过设置响应头中的 Content-Type 字段来完成。 ✅ 一、什么是 MIME 类型&#xff08;Content-Type&#xff09;&#xff1f; MIME&#xff08;…

SRS transcode支持 h264_nvenc 硬件解码方案

文章目录 SRS transcode支持 h264_nvenc 硬件解码方案1、修改文件2、重新编译3、使用 SRS transcode支持 h264_nvenc 硬件解码方案 SRS 是开源的流媒体服务&#xff0c;但在使用 GPU 服务器时&#xff0c;想要通过硬件加速&#xff0c;目前官方是不支持的&#xff0c;所以简单…

数字系统与编码

1. 数字系统&#xff08;Number Systems&#xff09; 1.1 常见数字系统 系统基数符号集示例应用场景二进制20, 11010计算机底层电路、数据存储八进制80-717Unix文件权限&#xff08;如chmod 755&#xff09;十进制100-942日常计算十六进制160-9, A-F0x1F内存地址、颜色编码&a…

【PyTorch】训练时跟OOM相关的提示信息

1. RuntimeError: CUDA error: CUBLAS_STATUS_NOT_INITIALIZED when calling cublasCreate(handle)

基于maven-jar-plugin打造一款自动识别主类的maven打包插件

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

多态的主要好处与不足

多态是面向对象编程的核心特性之一&#xff0c;它通过方法重写、接口实现等方式实现“同一操作作用于不同对象时产生不同行为”。以下是多态的主要好处与不足&#xff1a; 多态的好处 1. 提高代码灵活性和扩展性 开闭原则支持&#xff1a;新增子类时&#xff0c;无需修改现有…

excel解析图片pdf附件不怕

背景 工作中肯定会有导入excel还附带图片附件的下面是我解析的excel&#xff0c;支持图片、pdf、压缩文件实现 依次去解析excel&#xff0c;看看也没有附件&#xff0c;返回的格式是Map&#xff0c;key是第几行&#xff0c;value是附件list附件格式都被解析成pdf格式Reader.jav…

python爬虫 线程,进程,协程

0x00 线程 线程是一个执行单位&#xff0c;是在一个进程里面的&#xff0c;是共享进程里面的提供的内存等资源&#xff0c;使用多个线程时和使用多个进程相比&#xff0c;多个线程使用的内存等资源较少。进程像一座“房子”&#xff08;独立资源&#xff09;&#xff0c;线程是…

ES|QL,知道吗,专为搜索而生 —— 推出评分和语义搜索

作者&#xff1a;来自 Elastic Ioana Tagirta 在 Elasticsearch 8.18 和 9.0 中&#xff0c;ES|QL 支持评分、语义搜索以及更多的 match 函数配置选项&#xff0c;还有一个新的 KQL 函数。 使用 ES|QL 搜索 在 Elasticsearch 8.18 和 9.0 中&#xff0c;ES|QL 增加了一系列新功…

MIT6.S081-lab4

MIT6.S081-lab4 注&#xff1a;本篇lab的前置知识在《MIT6.S081-lab3前置》 1. RISC-V assembly 第一个问题 Which registers contain arguments to functions? For example, which register holds 13 in main’s call to printf? 我们先来看看main干了什么&#xff1a; …

一文总结通信电路中LC谐振回路中各公式以及对深入解读品质因数Q

目录 前言 一、基本公式总结 1.并联谐振回路 2.串联谐振回路 二、浅谈品质因数 1.衡量谐振回路能量存储与能量损耗之比的无量纲参数&#xff0c;用于描述谐振电路的频率选择性 2.当受到振荡驱动力时&#xff0c;谐振腔的中心频率与其带宽的比值 3.为什么谐振时电容上的…

Linux:文件系统

一.认识硬件–磁盘 1. 物理结构 1.2 存储结构 ❓如何定位⼀个扇区呢&#xff1f; 可以先定位磁头&#xff08;header&#xff09;——》确定磁头要访问哪⼀个柱⾯(磁道)&#xff08;cylinder&#xff09;——》 定位⼀个扇区(sector)。 柱⾯&#xff08;cylinder&#xff09…

数字孪生废气处理工艺流程

图扑数字孪生废气处理工艺流程系统。通过精准 3D 建模&#xff0c;对废气收集、预处理、净化、排放等全流程进行 1:1 数字化复刻&#xff0c;实时呈现设备运行参数、污染物浓度变化等关键数据。 借助图扑可视化界面&#xff0c;管理者可直观掌握废气处理各环节状态&#xff0c…