两数之和-第13届蓝桥杯选拔赛Python真题精选

[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第76讲。

两数之和,本题是2022年1月22日举办的第13届蓝桥杯青少组Python编程选拔赛真题编程部分第4题。题目要求对于给定的一组正整数和目标值,编程找出两个正整数,要求其和离目标值最接近。

先来看看题目的要求吧。

一.题目说明

编程实现:

给出一组正整数数据和一个正整数(目标值),从这组正整数中找出两个数,使这两个数相加后的和,小于等于目标值并且离目标值最接近,然后将两个数的和输出。

如:正整数数据为[9, 4, 3, 5],目标值为10,其中正整数数据中4和3、4和5、3和5 的和都小于目标值10,但离目标值最接近的两个数是4和 5,其和为9。

输入描述:

第一行输入一组长度大于 3 个正整数的数据(正整数 < 10000),正整数之间以一个英文逗号隔开

第二行输入一个正整数 n(1 < n < 19997),表示目标值

输出描述:

输出一个整数。

如果正整数数据中存在小于等于目标值并且离目标值最接近的两个数,则输出这两个数的和;

如果正整数数据中不存在这样的两个数,即正整数数据中任意两个数的和都超过了目标值,则输出-1

样例输入:

9,4,3,5

10

样例输出:

9

二.思路分析

这是一道简单的算法题,涉及的知识点包括循环、条件语句和列表等。

对于本题,最简单的方法就是暴力枚举,就是将所有的组合列举出来并求和,然后和目标值进行比较,在小于等于目标值的和中,找到最大的那个和。

计算两个数的组合之和,可以采取如下两种方式:

  • 嵌套循环

  • 使用combinations()函数

只是,使用这两种方法的时间复杂度都是O(n2),如果要降低时间复杂度,可以使用双指针算法。

所谓双指针是指在遍历列表的过程中,不是使用单个指针进行访问,而是使用两个指针进行访问,从而达到相应的目的。

最简单的双指针是对撞指针,它指的是使用两个指针left、right分别指向列表第一个元素和最后一个元素,然后left指针不断递增,right不断递减,直到两个指针的值相撞(即 left== right),或者满足其他要求的特殊条件为止。

图片

双指针利用了区间单调性的性质,可以将时间复杂度降到 O(n)。

思路有了,接下来,我们就进入具体的编程实现环节。

三.编程实现

根据上面的思路分析,我们使用三种方法来编写程序:

  • 枚举算法

  • 使用combinations()函数

  • 双指针算法

1. 枚举算法

根据前面的思路分析,我们使用嵌套循环编写代码如下:

图片

代码不多,说明两点:

1). res表示最终的结果,初始值为-1,如果不存在小于target的情况,就直接输出-1;

2). 注意i和j的范围,前者从0开始到len(nums) - 1,后者从i+1开始,一直到最后一个列表项。

2. 使用combinations()函数

combinations()函数可以帮我们生成所有可能的两个数的组合,原来的两层循环可以简化为一层,对应的代码如下:

图片

要使用combinations()函数,必须先导入。

3. 双指针算法

根据前面的思路分析,编写代码如下:

图片

代码稍微要复杂一点,简单说明两点:

1). 使用双指针算法,要确保nums列表是有序的;

2). 当left < right,计算两数之和,并不断调整left和right指针,当两个指针撞到一起了,循环结束。

至此,整个程序就全部完成了,你可以输入不同的数字来测试效果啦。

四.总结与思考

本题代码在10行左右,涉及到的知识点包括:

  • 循环语句;

  • 列表操作;

  • 输入输出处理;

  • 组合函数;

本题代码不多,难度中等,关键点是要理解题目的意思,这里要寻找小于等于target的两数和,并且是最接近target的。小于等于target的两数和可能有很多个,所谓最接近target,就是在满足条件的两数和中找最大的。

在计算机编程中,最常用的算法就是暴力枚举,这也是计算机最擅长的事情。

但是,暴力枚举要将所有的情况都列举出来,随着数据规模的增加,时间复杂度会急剧增加。因此,我们需要寻找更聪明的枚举方法,根据不同的问题和场景,可以采取不同的优化策略,也就产生了各种不同的算法。

本题中的双指针算法就是一个非常好的优化技巧,在编程中会经常用到,比如字符串反转、判断回文数和快速排序等。

你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。

如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄

需要源码的,可以移步至“超平的编程课”gzh。

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

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

相关文章

结构体(1)

结构体: 记录班级的学生的信息: 姓名 数组 char name[30][100]; // 性别 char sex[30]; // 0 1 年龄 int age[30]; 学号 int sno[30]; 打印 小明 同学 信息 c语言 --- 提供了一种方式&#xff0c;可以让用户自定义数据类型 &#xff1a; 构造一个数据类型 …

Java面试八股之死锁和活锁的区别

死锁和活锁的区别 基本定义&#xff1a; 死锁&#xff08;Deadlock&#xff09;&#xff1a;指两个或多个线程互相等待对方释放资源&#xff0c;从而导致所有线程都无法继续执行的状态。每个线程至少持有一个资源&#xff0c;并等待另一个由其他线程持有的资源&#xff0c;形…

初始操作系统

概念&#xff1a; 1.系统资源的管理者&#xff1a;实质控制和管理整个计算机系统的硬件和软件资源&#xff0c;并合理地组织调度计算机地工作和资源的分配 2.向上层提供方便易用的服务&#xff1a;以提供给用户和其他软件方便接口和环境 封装思想&#xff1a;操作系统把一些丑…

Oracle数据库面试题-2

21. 请解释Oracle数据库中的自动存储管理(ASM)的概念。 Oracle数据库中的自动存储管理(ASM) 自动存储管理(ASM)是一种Oracle数据库的存储管理解决方案,它使得数据库管理员能够集中管理多个物理磁盘驱动器,提供了一系列高级功能,如磁盘组、冗余和备份等。ASM简化了存…

阿里云服务器接入百度云防护后显示502原因

最近&#xff0c;发现很多使用了阿里云服务器的网站出现502的情况 经百度云防护技术排查发现阿里云机房对百度云防护的IP进行了拦截&#xff0c;原因近期可能是百度云防护的IP请求过于频繁&#xff0c;导致阿里云机房策略把百度云的IP当成了攻击IP。 解决办法是提交工单让阿里…

第三方模块的下载与安装

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在进行Python程序开发时&#xff0c;除了可以使用Python内置的标准模块外&#xff0c;还有很多第三方模块可以被我们所使用。对于这些第三方模块&…

python过滤数组中的空字符串

20240603 - 解决方案 对于一个字符串数组&#xff0c;想要过滤其中的空字符串的时候。 问答一中提供了几种方案&#xff1a; str_list filter(None, str_list) str_list filter(bool, str_list) str_list filter(len, str_list) str_list filter(lambda item: item, st…

关于AI数字人的几个创作平台及其使用(二)

文章目录 二、创作平台二1、基本信息2、使用方法1、进入创作页面2、开始创作2.1、脚本创作2.1.1、使用文本软件创作2.1.2、AI创作脚本2.2、选择模板2.2.1、选择模板2.2.2、字幕与配音2.3、细节调整2.3.1、数字人2.3.2、音乐2.3.3、背景2.3.4、文字2.3.5、贴图2.3.6、智能配图或…

5.31——进军MYSQL

目录 简略版&#xff1a; 详解版&#xff1a; 一. myaql概述&#xff1a; 数据库&#xff1a; 数据库管理系统&#xff1a; SQL&#xff1a; 二. masql的安装&#xff1a; 启动与停止&#xff1a; 1. MYSQL提供的命令行 2. windows提供的命令行工具 三.数据模型 …

在一个定义好的数据对象(class)中,后续更新时只更新其中部分数据,其余部分会恢复初始设置吗

在一个定义好的数据对象&#xff08;class&#xff09;中&#xff0c;后续更新时只更新其中部分数据&#xff0c;其余部分会恢复初始设置吗 在一个定义好的数据对象&#xff08;class&#xff09;中&#xff0c;如果你只更新其中部分数据&#xff0c;其余部分的值不会恢复到初始…

Claude 3可使用第三方API,实现业务流程自动化

5月31日&#xff0c;著名大模型平台Anthropic宣布&#xff0c;Claude3模型可以使用第三方API和工具。 这也就是说&#xff0c;用户通过文本提问的方式就能让Claude自动执行多种任务&#xff0c;例如&#xff0c;从发票中自动提取姓名、日期、金额等&#xff0c;该功能对于开发…

DVWA靶场搭建:Apache、MySQL、PHP、DVWA

最近为了能够较为真实地学习Web渗透的各种技术&#xff0c;就想着自己搭建一个专门用于学习的Web演练平台--DVWA“靶场”。 DVWA可以进行暴力&#xff08;破解&#xff09;、命令行注入、跨站请求伪造、文件包含、文件上传、不安全的验证码、SQL注入、SQL盲注、弱会话ID、XSS漏…

批量归一化(BN)和层归一化(LN)的区别

批量归一化&#xff08;Batch Normalization, BN&#xff09;和层归一化&#xff08;Layer Normalization, LN&#xff09;是深度学习中常用的两种归一化技术&#xff0c;它们主要用于解决训练过程中的内部协变量偏移问题&#xff0c;加速模型收敛和提高稳定性。 1. 为什么需要…

田忌赛马

题目描述 你要和田忌赛马。你们各自有 &#x1d441;N 匹马&#xff0c;并且要进行 &#x1d441;N 轮比赛&#xff0c;每轮比赛&#xff0c;你们都要各派出一匹马决出胜负。 你的马匹的速度分别为 u1​,u2​,⋯&#xff0c;un​&#xff0c;田忌的马匹的速度分别为 v1​,v2​…

基于Java的工程项目管理系统的功能与技术优势 工程管理系统源码

在当今的工程领域&#xff0c;项目管理的高效协同和信息共享是提升工作效率、降低成本的关键。本文将向您介绍一款基于Java技术构建的工程项目管理系统&#xff0c;该系统采用前后端分离的先进技术框架&#xff0c;功能全面&#xff0c;能够满足不同角色的需求&#xff0c;从项…

如何制作一本温馨的电子相册呢?

随着科技的不断发展&#xff0c;电子相册已经成为了一种流行的方式来记录和分享我们的生活。一张张照片&#xff0c;一段段视频&#xff0c;都能让我们回忆起那些温馨的时光。那么&#xff0c;如何制作一本温馨的电子相册呢&#xff1f; 首先&#xff0c;选择一款合适的电子相册…

Kubernetes集群Pod控制器

前言 在 K8s 集群中&#xff0c;Pod 控制器是一种关键的组件&#xff0c;负责管理和控制Pod的生命周期。Pod 是 K8s 中最小的可部署单元&#xff0c;通常包含一个或多个容器&#xff0c;Pod 控制器则确保所需数量的 Pod 实例处于运行状态&#xff0c;并根据定义的规则进行自动…

Vuforia AR篇(五)— 地平面检测

目录 前言一、什么是地平面识别&#xff1f;二、使用步骤三、示例代码四、效果五、总结 前言 在增强现实&#xff08;AR&#xff09;应用程序的开发中&#xff0c;地平面识别是一项关键技术&#xff0c;它允许虚拟对象与现实世界的地面进行互动。Vuforia 是一个功能强大的 AR …

Centos7安装Docker和DockerCompose

1.CentOS安装Docker Docker CE 支持 64 位版本 CentOS 7&#xff0c;并且要求内核版本不低于 3.10&#xff0c; CentOS 7 满足最低内核的要求&#xff0c;所以我们在CentOS 7安装Docker。 1.1.卸载&#xff08;可选&#xff09; 如果之前安装过旧版本的Docker&#xff0c;可以…