笔试练习day2

目录

  • BC64 牛牛的快递
    • 题目解析
    • 解法
      • 模拟
      • 代码
        • 方法1
        • 方法2
  • DP4 最小花费爬楼梯
    • 题目解析
    • 解法
      • 动态规划
        • 状态表示
        • 状态转移方程
        • 代码
  • 数组中两个字符串的最小距离
    • 题目解析
    • 解法
      • 方法1暴力解法(会超时)
      • 方法2贪心(动态规划)
      • 代码

感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接
🐒🐒🐒 个人主页
🥸🥸🥸 C语言
🐿️🐿️🐿️ C语言例题
🐣🐣🐣 python
🐓🐓🐓 数据结构C语言
🐔🐔🐔 C++
🐿️🐿️🐿️ 文章链接目录
🏀🏀🏀 笔试练习题

BC64 牛牛的快递

链接BC64 牛牛的快递
在这里插入图片描述

题目解析

这道题和出租车那种是一个意思,首先要有一个起步价格,之后多出来的要额外收费,这样看起来就是一个一次函数的方程,y=kx+b+a,k=1是每千克收的钱,x是快递的重量(这里要注意x有小数的话要往整数进1),b=20表示的是起步价,而a就是是否加急的费用,不加急a=0,加急a=5

解法

模拟

我们需要先模拟一下这个过程,假设有akg,对于a来说有两种情况,一种是<=1,另一种是>1
在这里插入图片描述
对于<=1这种情况比较简单,>1这种情况是要考虑a-1是否有小数,如果有小数就需要向上取整,比如1.1向上取整就是2
这里的向上取整有两种方法
第一种就是先判断(a-1)-(int)(a-1)是否大于0,如果大于0就再加1
第二种就是用一个函数ceil(a-1),这个函数可以自动向上取整(需要包含头文件cmath)
在这里插入图片描述
最后再判断要不要加急

代码

方法1
#include <iostream>
#include<cmath>
using namespace std;int main() {double a;char b;cin >> a >> b;int ret = 0;if (a <= 1) {ret += 20;} else {ret += 20;double c=a-1;if(c-(int)c>0)ret+=int(c)+1;elseret+=c;}if (b == 'y')ret += 5;cout << ret << endl;return 0;
}
方法2
#include <iostream>
#include<cmath>
using namespace std;int main() {double a;char b;cin >> a >> b;int ret = 0;if (a <= 1) {ret += 20;} else {ret += 20;a -= 1;ret += ceil(a);}if (b == 'y')ret += 5;cout << ret << endl;return 0;
}

DP4 最小花费爬楼梯

链接DP4 最小花费爬楼梯
在这里插入图片描述

题目解析

为了方便我们将第一个例子用图来表示,假设小人从第-1个台阶开始走(事实上没有第-1个台阶),此时在第-1个台阶开始他只需要支付0元就可以选择爬1个或2个台阶
在这里插入图片描述
这里需要注意的一点就是楼顶我们需要判断在哪
根据第一个例子第0层花2元,第一层花5元
如果楼顶在第二层的话,花费最少的方式就是选择第0层开始爬,这样我们就只需花2元就到达第2层(这里是将第2层看作楼顶)
如果楼顶在第三层的话,花费最少的方式就是选择第1层开始爬,这样我们就只需话5元就到底第3层(这里是将第3层看作楼顶)
根据示例我们可以得出结果为5元,所以楼顶应该是在3楼

对于楼顶在第3层我们有如下的几种方式到达
第一种方式0->1->3
在这里插入图片描述
第二种方式0->2->3
在这里插入图片描述
第三种方式1->3
在这里插入图片描述

解法

动态规划

状态表示

我们可以将上面的台阶简化成下面的一个数组,第i个台阶就表示数组第i个元素,现在需要求到第i个元素的最小花费,我们用dp[i]表示
在这里插入图片描述

状态转移方程

状态转移方程我们一般从最后一步去划分情况
比如到达i位置时我们可以花费cost[i-1]从i-1位置跳到i位置
也可以划分cost[i-2]从i-2位置跳到i位置
在这里插入图片描述
而从i-2到i的总费用就是到达i-2时的最小花费加上cost[i-2],也就是dp[i-2]+cost[i-2]
从i-1到i的总费用就是到达i-1的最小花费加上cost[i-1],也就是dp[i-1]+cost[i-1]
dp[i]就是判断dp[i-1]+cost[i-1]和dp[i-2]+cost[i-2]谁花费的价钱最少
所以dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2])
从上面的方程可知dp[i]的值需要知道dp[i-1]和dp[i-2]的值,而dp[i-1]和dp[i-2]的值又需要知道他们前面的dp[i-3]…的值,所以我们需要从左向右开始推导
因为dp[2]需要知道dp[0]和dp[1]的值,但是dp[0]和dp[1]不能继续细分dp[-1]…,所以dp[0]和dp[1]我们需要初始化
根据题意我们是可以选择从0或1台阶开始起跳的,也就是说我们到达0台阶和到达1台阶是不需要花钱的
所以dp[0]=dp[1]=0,知道dp[0]和dp[1]后就可以往后推dp[n]了(注意这里的n是楼顶表示的是最后一块台阶的下一个位置)

代码
#include <iostream>
using namespace std;int main() {
int cost[100000],dp[100000]={0};
int n=0;
cin>>n;
for(int i=0;i<n;i++)
{cin>>cost[i];
}
for(int i=2;i<=n;i++)
{
dp[i]=min(dp[i-1]+cost[i-1],dp[i-2]+cost[i-2]);
}
cout<<dp[n]<<endl;
return 0;
}

注意这里的min是一个自带的函数,当然也可以自己去实现

数组中两个字符串的最小距离

链接数组中两个字符串的最小距离
在这里插入图片描述

题目解析

这道题有点难读懂,我们以示例2为例子
strs是一个字符串数组,字符串数组的每一个元素都是字符串
str1和str2都是一个字符串,他们可能是在字符串数组里的,现在需要我们去在这个字符串数组中找出str1和str2,并且求出他们对应位置的最小值(因为strs里可能含义多个相同的字符串,所以要对他们的距离进行比较,得到最后的值),如果没有找到就返回-1
在这里插入图片描述
这个图中str1在strs中出现了两次,一个是在第0个位置,另一个是在第5的一个位置
str2只出现了一次,是在第4的一个位置
他们的距离是|0-4|和|4-5|,也就是4和1,显然最短的距离就是1,所以返回1
这道题也可以换成下面这样
在数组中求出a和b的最小距离
在这里插入图片描述
或者在下面字符串求出a和b的最小距离
在这里插入图片描述

解法

方法1暴力解法(会超时)

我们还是以示例2为例子
先用一层for循环用一个指针ptr1去找出QWER的位置
然后在这一层for循环里面再嵌套一次for循环用指针ptr2去找666
之后用一个ret去记录他们之间的距离
在这里插入图片描述
记录完后再让ptr2往后找是否有是否还有相同的字符串,因为有可能会出现下面这种情况,就是QWER会在第一次的666后面

在这里插入图片描述

在这里插入图片描述

内部for循环找完后,又回到外部for循环,再让ptr1往后找是否有QWER,找到后又进入内部for循环
这种解法的时间复杂度是O(n^2),会超时,所以这里只是提供一个思路

方法2贪心(动态规划)

这个方法是在方法1的基础上进行了优化
在这里插入图片描述
我们还是让ptr1和ptr2分别记录QWER和666的下标,并且因为是数组,所以我们让ptr1和ptr2记录的位置初始化成-1,表示他们还没有开始记录下标
在这里插入图片描述
然后我们先让ptr1去找QWER的位置
在这里插入图片描述
找到后向左查找最近的一次666出现的位置,如果没有出现那么ptr2就不会变,仍为-1
在这里插入图片描述
此时我们还需要注意ptr1记录的下标需要更新,这里的QWER下标为0,所以ptr1记录的值也应该变成0
在这里插入图片描述
然后再向右开始遍历,如果右边的QWER比666先出现,那么就先更新ptr1,如果666比QWER先出现,那么就先更新ptr2
在这里插入图片描述
这里的666先出现,所以就将ptr2记录的值变成3,然后ret比较一下他们现在的距离和之前的最短距离谁更短
因为之前没有666出现,所以ret是没有最短距离的,因此这里的ret直接就等于3
之后再向右遍历,因为右边只有一个QWER了,所以就让ptr1更新一下
在这里插入图片描述
这次的距离是最短的,所以ret更新为1
这个方法的时间复杂度为O(N),只用一次循环就找出了最短距离

代码

#include <iostream>
#include<string>
using namespace std;int main() {int n;string s1, s2;string s;cin >> n;cin >> s1 >> s2;int ptr1 = -1, ptr2 = -1, ret = 0x3f3f3f3f;for (int i = 0; i < n; i++) {cin >> s;if (s == s1) {if (ptr2 != -1) {ret = min(ret, i - ptr2);}ptr1 = i;}else if (s == s2) {if (ptr1 != -1){ret = min(ret, i - ptr1);}ptr2 = i;}}if (ret == 0x3f3f3f3f)cout << -1;elsecout << ret;return 0;
}

这段代码中ret初始化为0x3f3f3f3f表示非常大的一个值,也就是这道题的距离不会有比这个值更大的

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

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

相关文章

Yolov8在RK3588上进行自定义目标检测(一)

1.数据集和训练模型 项目地址&#xff1a;https://github.com/airockchip/ultralytics_yolov8.git 从github(htps:l/github.com/airockchip/ultralytics_yolov8)上获取yolov8模型。 下载项目&#xff1a; git clone https://github.com/airockchip/ultralytics_yolov8.git …

Python | Leetcode Python题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; class Solution:def removeDuplicateLetters(self, s: str) -> str:vis defaultdict(int)cnt defaultdict(int)for ch in s: cnt[ch] 1queue []for ch in s:if vis[ch] 0:while queue and queue[-1] > ch and cnt[queue[-1]]:vi…

《Advanced RAG》-03-使用 RAGAs + LlamaIndex 进行 RAG 评估

摘要 文章首先介绍了 RAG 评估的三个主要部分&#xff1a;输入查询、检索上下文和 LLM 生成的响应。 提到了 RAGAs 提出的 RAG 评估指标&#xff0c;包括 Faithfulness、Answer Relevance 和 Context Relevance&#xff0c;以及 RAGAs 网站提供的两个额外指标&#xff1a;Conte…

【面试题】分发糖果

这里写自定义目录标题 题目解题问题描述解题思路详细步骤初始化左到右扫描右到左扫描计算总糖果Python 代码示例 示例示例 1示例 2 复杂度分析 题目 仅供学习 解题 使用一种贪心算法的策略解决糖果分配问题。 问题描述 给定一个整数数组 ratings&#xff0c;表示每个孩子…

联邦学习研究综述【联邦学习】

文章目录 0 前言机器学习两大挑战&#xff1a; 1 什么是联邦学习&#xff1f;联邦学习的一次迭代过程如下&#xff1a;联邦学习技术具有以下几个特点&#xff1a; 2 联邦学习的算法原理目标函数本地目标函数联邦学习的迭代过程 3 联邦学习分类横向联邦学习纵向联邦学习联邦迁移…

功能实现——使用 RestTemplate 进行跨项目接口调用

目录 1.需求说明2.项目环境搭建3.代码实现3.1.使用 RestTemplate 进行调用3.1.1.项目 A3.1.2.项目 B 3.2.测试3.3.使用 JsonObject 来传递和接收 json 数据3.3.1.说明3.3.2.代码实现 3.4.其它说明3.4.1.restTemplate.exchange()3.4.2.restTemplate.postForObject()3.4.3.区别总…

8.4 字符串中等 443 String Compression 467 Unique Substrings in Wraparound String

443 String Compression 注意&#xff1a;这里是按照顺序压缩&#xff0c;不忽略顺序就不能用字母表计数再还原了。 如果char num 1 只需要压入char本身 num > 1 时还需要压入char的个数 按字符压入 class Solution { public:vector<char> Push(vector<char>&a…

Debug-019-git reflog的两种使用场景

前情&#xff1a;最近在开发项目中对版本管理有了新的理解&#xff0c;感觉在这方面有了新的收获。同时学习了一个新的git指令&#xff1a;git reflog 实际了解之后&#xff0c;发现这个指令不是很常用&#xff0c;但是对于特定的场景的话它还是非常比较方便 这里我列举两种我…

Nextjs——国际化那些事儿

背景&#xff1a; 某一天&#xff0c;产品经理跟我说&#xff0c;我们的产品需要搞国际化 国际化的需求说白了就是把项目中的文案翻译成不同的语言&#xff0c;用户想用啥语言来浏览网页就用啥语言&#xff0c;虽然说英语是通用语言&#xff0c;但国际化了嘛&#xff0c;产品才…

算法--初阶

1、tips 1.1、set求交集 {1,2,3} & {2,3} & {1,2} {2} 其实就是位运算&#xff0c; 只有set可以这样使用&#xff0c; list没有这种用法 {1,2,3} | {2,3, 4} | {1,2} {1, 2, 3, 4} 并集 1.2、*与** * 序列(列表、元组)解包&#xff0c;如果是字典&#xff0c;那…

第一个 Flask 项目

第一个 Flask 项目 安装环境创建项目启动程序访问项目参数说明Flask对象的初始化参数app.run()参数 应用程序配置参数使用 Flask 的 config.from_object() 方法使用 Flask 的 config.from_pyfile() 方法使用 Flask 的 config.from_envvar() 方法步骤 1: 设置环境变量步骤 2: 编…

【C++学习第19天】最小生成树(对应无向图)

一、最小生成树 二、代码 1、Prim算法 #include <cstring> #include <iostream> #include <algorithm>using namespace std;const int N 510, INF 0x3f3f3f3f;int n, m; int g[N][N]; int dist[N]; bool st[N];int prim() {memset(dist, 0x3f, sizeof di…

学习分享:解析电商 API 接入的技术重难点及解决方案

在当今电商业务迅速发展的时代&#xff0c;接入电商 API 已成为许多企业提升竞争力和拓展业务的重要手段。然而&#xff0c;在这个过程中&#xff0c;往往会遇到一系列的技术重难点。本文将深入解析这些问题&#xff0c;并提供相应的解决方案。 一、电商 API 接入的技术重难点 …

c++ 初始值设定项列表(initializer_list)

引例 我们在写c代码的时候&#xff0c;多多少少会遇到这样写的&#xff1a; 如果是这样写还好说&#xff1a; 第一个是因为编译器强制匹配参数。 其他都是因为在有对应构造函数的情况下支持的隐式类型转换。 而支持的构造函数是这个&#xff1a; 如果有不懂的可以开这一篇&a…

麦田物语第十八天

系列文章目录 麦田物语第十八天 文章目录 系列文章目录一、(Editor)制作 [SceneName] Attribute 特性二、场景切换淡入淡出和动态 UI 显示一、(Editor)制作 [SceneName] Attribute 特性 在本节课我们编写Unity的特性Attribute来更好的完善我们项目,具体是什么呢,就是当…

深入理解 ReLU 激活函数及其在深度学习中的应用【激活函数、Sigmoid、Tanh】

ReLU&#xff08;Rectified Linear Unit&#xff09;激活函数 ReLU&#xff08;Rectified Linear Unit&#xff09;激活函数是一种广泛应用于神经网络中的非线性激活函数。其公式如下&#xff1a; ReLU ( x ) max ⁡ ( 0 , x ) \text{ReLU}(x) \max(0, x) ReLU(x)max(0,x) 在…

docker部署elasticsearch和Kibana

部署elasticsearch 通过下面的Docker命令即可安装单机版本的elasticsearch&#xff1a; docker run -d \--name es \-e "ES_JAVA_OPTS-Xms512m -Xmx512m" \-e "discovery.typesingle-node" \-v es-data:/usr/share/elasticsearch/data \-v es-plugins:/u…

《LeetCode热题100》---<5.①普通数组篇五道>

本篇博客讲解LeetCode热题100道普通数组篇中的五道题 第一道&#xff1a;最大子数组和&#xff08;中等&#xff09; 第二道&#xff1a;合并区间&#xff08;中等&#xff09; 第一道&#xff1a;最大子数组和&#xff08;中等&#xff09; 法一&#xff1a;贪心算法 class So…

我的256天创作纪念日

机缘 ————今天一大早收到CSDN的推送消息&#xff0c;告诉我这是我的256天创作纪念日。在这个特别的日子里&#xff0c;我回望自己踏上创作之路的点点滴滴&#xff0c;心中充满了感慨与感激。从最初的懵懂尝试到如今能够自信地分享见解&#xff0c;这段旅程不仅见证了我的成…

【教学类-73-01】20240804镂空瓶子01

背景需求&#xff1a; 瓶子里的春天呀&#xff01; - 小红书 (xiaohongshu.com)https://www.xiaohongshu.com/explore/63ef87f8000000000703acae?app_platformandroid&ignoreEngagetrue&app_version8.47.0&share_from_user_hiddentrue&xsec_sourceapp_share&…