Python算法例34 寻找丢失的数

1. 问题描述

给一个由1~n的整数随机组成的一个字符串序列,其中丢失了一个整数,本例将找到它。

2. 问题示例

给出n=20,str=19201234567891011121314151618,丢失的数是17。

3. 代码实现

def find_missing_number(n, string):nums = set(range(1, n+1))  # 创建一个包含1到n的整数的集合i = 0while i < len(string):j = iwhile j < len(string) and int(string[i:j+1]) <= n:num = int(string[i:j+1])if num in nums:nums.remove(num)j += 1i += 1return nums.pop()n = 20
string = "19201234567891011121314151618"
missing_number = find_missing_number(n, string)
print("丢失的数是:", missing_number)

这段代码使用了两个嵌套的 while 循环来遍历字符串中的数字,并将其转换为整数进行处理。具体来说,它使用了滑动窗口的思想。

首先,我们创建一个包含1到n的整数的集合 nums。然后,外层循环通过指针 i 遍历字符串中的每个字符。内层循环通过指针 j,从当前字符开始,逐步增加,直到满足以下两个条件之一:1)窗口内的数字超过了 n,或者2)到达了字符串的末尾。

在内层循环中,我们将窗口内的子串转换为整数,并判断是否存在于集合 nums 中。如果存在,我们将其从集合中移除。这样,最终剩下的唯一一个整数就是丢失的数。

对于给定的示例,其中的字符串是 "19201234567891011121314151618",我们的目标是找到丢失的数。根据算法的执行过程,我们可以得到以下结果:

  • 窗口从字符 '1' 开始,转换为整数 1,存在于集合中,将其移除。
  • 窗口从字符 '9' 开始,转换为整数 9,存在于集合中,将其移除。
  • 窗口从字符 '2' 开始,转换为整数 2,存在于集合中,将其移除。
  • 窗口从字符 '0' 开始,转换为整数 20,超过了集合的范围,停止窗口移动。
  • 窗口从字符 '1' 开始,转换为整数 1,存在于集合中,将其移除。
  • 窗口从字符 '2' 开始,转换为整数 12,存在于集合中,将其移除。
  • 窗口从字符 '3' 开始,转换为整数 13,存在于集合中,将其移除。
  • ...
  • 最终,剩下的唯一一个整数是 17,即丢失的数。

因此,输出结果应该是 "丢失的数是: 17"。

这段代码的时间复杂度是O(n^2),因为它使用了两个嵌套的循环来遍历字符串。如果字符串很长,算法的性能可能会受到影响。你可以根据实际需求对代码进行优化。

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

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

相关文章

正则表达式手册

文章目录 一、表达式全集二、常见的正则表达式1. 校验数字的表达式2. 校验字符的表达式3. 特殊需求表达式 一、表达式全集 字符描述\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如&#xff0c;“n”匹配字符“n”。“\n”匹配一…

【代码随想录】刷题笔记Day47

前言 又过了个愉快的周末~大组会终于不用开了&#xff0c;理论上已经可以回家了&#xff01;但是我多留学校几天吧&#xff0c;回家实在太无聊了&#xff0c;也没太多学习的氛围 198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; dp[i]含义 考虑下标i&#xff08;包括…

【leetcode】力扣算法之两数相加【中等难度】

题目描述 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外&#xff0c;这两个数都…

Qt5.14.2实现将html文件转换为pdf文件

文章目录 简介源码widget.cppwidget.uihtml文件演示效果简介 QPdfWriter是Qt框架中用于创建和写入PDF文件的类。它允许您在您的Qt应用程序中动态生成并输出PDF文档,以便进行打印、保存或导出。 QPdfWriter类提供了以下一些常用的函数和方法,可以让您创建和定制PDF文件: 构…

ASM磁盘管理:从初始化参数到自动化管理的全面解析

文章目录 一、引言二、ASM初始化参数三、ASM三大系统权限四、ASM实例的启停1.Oracle ASM的启停可以通过两种方式进行2.查看集群中的资源状态3.配置 ASM资源随着系统启动而启动4.配置数据库实例随着ASM启动而启动 五、数据库实例与ASM的交互六、 启动策略详解七、 ASM后台进程八…

Hugging face库

1. Transformers 是NLP, CV, audio&#xff0c;speech processing 任务的库。 它包含了超过10000个预训练的模型&#xff0c;涵盖了各种NLP任务&#xff0c;如文本分类&#xff0c;问答&#xff0c;文本生成&#xff0c;情感分析等。Transformers库支持多种深度学习框架&#…

MySQL决战:MySQL数据导入导出

目录 前言 一.navact数据导入导出&#xff08;第三方工具&#xff09; 1.导入数据 2.数据导出 二. mysqldump命令导入导出数据 1.mysqldump介绍 2.数据导出 3.数据导入 三.load data file进行数据导入导出&#xff08;只限于单表&#xff09; 1.数据导出 增加导出权…

python算法每日一练:连续子数组的最大和

这是一道关于动态规划的算法题&#xff1a; 题目描述&#xff1a; 给定一个整数数组 nums&#xff0c;请找出该数组中连续子数组的最大和&#xff0c;并返回这个最大和。 示例&#xff1a; 输入&#xff1a;[-2, 1, -3, 4, -1, 2, 1, -5, 4] 输出&#xff1a;6 解释&#xff…

linux系统基础知识-基础IO

IO 概念引入位图的概念IO的系统调用函数openwriteread()close简单使用样例&#xff1a; 文件描述符fd默认文件流stdin/stdout/stderr文件描述符的分配规则 重定向的概念输出重定向输入重定向追加重定向dup2()系统调用总结 文件缓冲区深入理解缓冲区的概念输出缓冲区部分代码解释…

WEB 3D技术 three.js 线框几何体

本文 我们说一下 线框几何体 想将一个几何体 以线框形式展现 threeJS中 有两种类可以实现 第一种 WireframeGeometry 这种几何体 其实就类似于 将材质中的 wireframe 开启 这种方法 之前我们也用过 还有一种 就是 EdgesGeometry 边缘几何体 我们先将代码写成这样 import .…

【深度学习每日小知识】Data Augmentation 数据增强

数据增强是通过对原始数据进行各种转换和修改来人工生成附加数据的过程&#xff0c;旨在增加机器学习模型中训练数据的大小和多样性。这对于计算机视觉领域尤为重要&#xff0c;因为图像经常被用作输入数据。 计算机视觉中的数据增强 数据增强的主要目标是解决过拟合问题&…

使用迭代优化递归程

王有志&#xff0c;一个分享硬核Java技术的互金摸鱼侠加入Java人的提桶跑路群&#xff1a;共同富裕的Java人 今天我们将会分析上篇文章中递归算法存在的问题&#xff0c;并通过迭代去优化。 递归存在的问题 上一篇中&#xff0c;我们计算了序号10以内的斐波那契数。今天为了清…

【Leetcode】236.二叉树的最近公共祖先

一、题目 1、题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。” 示例1…

商品秒杀总结

秒杀模块编写思维总结 分为两种模式一个是限时购买&#xff0c;一个是限裤购买。 我们这里使用的是指定时间段下面的限库购买 单独使用一个库来存储数据&#xff0c;下面有两张表&#xff0c;一张表是具体的商品&#xff0c;一张表是订单。用户下的订单数据都要放到redis 中…

【Linux】journalctl和dmesg日志的区别

journalctl 和 dmesg 是两个在 Linux 系统中查看日志信息的工具&#xff0c;它们提供了不同层次和角度的系统日志。 journalctl&#xff1a; journalctl 是 systemd-journald 服务的一个前端&#xff0c;用于检查和查询系统日志。它使用 systemd 的日志系统&#xff0c;将日志信…

每日coding

今天无意点进一个回文串的题目&#xff0c;对于回文串我第一印象就用双指针&#xff0c;但是确实没写出来&#xff0c;看了评论区题解&#xff0c;绝大多数都是用dp来做的&#xff0c;但是找到一个用双指针做的&#xff0c;刚好延续思路&#xff0c;先把题目贴出来。 5、最长回…

64、图片预处理:Normalize

上一篇介绍了图像预处理中 resize 和 crop 的概念,在仓库的 python 预处理函数中,在 resize 和 crop之后,还有几个预处理的过程:一个是归一化,另外就是transpose 和reshape。 这一节就介绍一下,为什么在推理之前还需要对图像进行归一化。 归一化(Normalization) 在深…

Python用法:if __name__ == “__main__“的作用

文章目录 前言一、__name__是什么二、if __ name__ == __ main__语句的使用1.tempconv.py2.calc.py三、存在的问题查看__name__属性:四、总结前言 与C语言不同,Python是一种解释型脚本语言,在执行之前不同要将所有代码先编译成中间代码,Python程序运行时是从模块顶行开始,…

Nacos使用MySQL8时区问题导致启动失败

文章目录 配置下mysql的时区方式一 (永久)方式二&#xff08;临时&#xff09; 由于mysql8需要配置时区&#xff0c;如果不配置时区&#xff0c;nacos就连不上mysql&#xff0c;从而也就无法登录nacos自带的图形化界面 配置下mysql的时区 方式一 (永久) 直接修改配置文件&…

关于“Python”的核心知识点整理大全63

目录 20.2.11 使用 Git 跟踪项目文件 1. 安装Git 2. 配置Git 3. 忽略文件 .gitignore 注意 4. 提交项目 20.2.12 推送到 Heroku 注意 20.2.13 在 Heroku 上建立数据库 20.2.14 改进 Heroku 部署 1. 在Heroku上创建超级用户 注意 注意 20.2.11 使用 Git 跟踪项目文件…