Python每日一题(15)
Python每日一题2025.4.4
- 一、题目
- 题目描述
- 输入格式
- 输出格式
- 输入输出样例 #1
- 输入 #1
- 输出 #1
- 二、分析
- 三、源代码
- 四、deepseek
一、题目
题目描述
您需要写一种数据结构,来维护一些数(都是绝对值 1 0 9 10^9 109 以内的数)的集合,最开始时集合是空的。其中需要提供以下操作,操作次数 q q q 不超过 1 0 4 10^4 104:
- 定义数 x x x 的排名为集合中小于 x x x 的数的个数 + 1 +1 +1。查询数 x x x 的排名。注意 x x x 不一定在集合里。
- 查询排名为 x ( x ≥ 1 ) x(x\ge 1) x(x≥1) 的数。保证集合里至少有 x x x 个数。
- 求 x x x 的前驱(前驱定义为小于 x x x,且最大的数)。若不存在则输出 − 2147483647 -2147483647 −2147483647。
- 求 x x x 的后继(后继定义为大于 x x x,且最小的数)。若不存在则输出 2147483647 2147483647 2147483647。
- 插入一个数 x x x,本题的数据保证插入前 x x x 不在集合中。
保证执行 1 , 3 , 4 1,3,4 1,3,4 操作时,集合中有至少一个元素。
输入格式
第一行是一个整数 q q q,表示操作次数。
接下来 q q q 行,每行两个整数 o p , x op,x op,x,分别表示操作序号以及操作的参数 x x x。
输出格式
输出有若干行。对于操作 1 , 2 , 3 , 4 1,2,3,4 1,2,3,4,输出一个整数,表示该操作的结果。
输入输出样例 #1
输入 #1
7
5 1
5 3
5 5
1 3
2 2
3 3
4 3
输出 #1
2
3
1
5
二、分析
整体上打算封装成类,然后分别定义函数input()、_insert()、_one()、_two()、_three()、_four()分别解决对应问题。其中的12345分别对应函数one two three four _insert,操作数1234用英语不会写,所以直接用对应英语单词代替了。然后内部实现细节主要应用了二分查找方式,这里不做细致展开。整体上就看类的封装。
三、源代码
class SolveProblems:def __init__(self):self.nums = [] def input(self):q = int(input())for _ in range(q):op, x = map(int, input().split())if op == 1:print(self.one(x))elif op == 2:print(self.two(x))elif op == 3:print(self.three(x))elif op == 4:print(self.four(x))elif op == 5:self._insert(x)def _insert(self, x):left, right = 0, len(self.nums)while left < right:mid = (left + right) // 2if self.nums[mid] < x:left = mid + 1else:right = midself.nums.insert(left, x)def one(self, x):left, right = 0, len(self.nums)while left < right:mid = (left + right) // 2if self.nums[mid] < x:left = mid + 1else:right = midreturn left + 1def two(self, x):return self.nums[x-1]def three(self, x):left, right = 0, len(self.nums)while left < right:mid = (left + right) // 2if self.nums[mid] < x:left = mid + 1else:right = midif right == 0:return -2147483647return self.nums[right-1]def four(self, x):left, right = 0, len(self.nums)while left < right:mid = (left + right) // 2if self.nums[mid] <= x:left = mid + 1else:right = midif left == len(self.nums):return 2147483647return self.nums[left]if __name__ == "__main__":solver = SolveProblems()solver.input()
写着写着把输出跟输入写到一起了,没注意,就不修改了。one two three four是类内部函数,理论上应该加上_。输出结构也没有问题。内部实现细节等之后说到查找的时候,再细致讲解。
四、deepseek
import bisectq = int(input())
nums = []for _ in range(q):op, x = map(int, input().split())if op == 1:# 查询x的排名:小于x的数的个数 +1rank = bisect.bisect_left(nums, x) + 1print(rank)elif op == 2:# 查询排名为x的数print(nums[x-1])elif op == 3:# 前驱:最大的小于x的数pos = bisect.bisect_left(nums, x)if pos == 0:print(-2147483647)else:print(nums[pos-1])elif op == 4:# 后继:最小的大于x的数pos = bisect.bisect_right(nums, x)if pos == len(nums):print(2147483647)else:print(nums[pos])elif op == 5:# 插入x,保证之前不存在bisect.insort(nums, x)
这里deepseek用到了python的一个库,bisect,这里我之前没用过,也不是很熟悉。但是从内部实现来看,似乎十分方便。bisect模块来模拟部分操作,因为bisect提供的函数可以在O(log n)时间内完成插入和查找,但其他操作需要额外处理。
***维护有序列表:***我们可以使用一个列表来动态维护有序的元素集合。这样可以利用二分查找来高效地执行各种操作:
插入操作(5):使用bisect.insort来保持列表有序。
查询排名(1):使用bisect.bisect_left找到插入位置,该位置即为小于x的数的个数,排名则是该位置+1。
查询第k小的数(2):直接访问有序列表中的第k-1个元素(因为列表是0-based的)。
前驱查询(3):使用bisect.bisect_left找到x的插入位置,前驱是该位置前一个位置的元素,如果位置为0则不存在。
后继查询(4):使用bisect.bisect_right找到x的插入位置,后继是该位置的元素,如果位置超出列表长度则不存在。
相关文章:
Python每日一题(15)
Python每日一题2025.4.4 一、题目题目描述输入格式输出格式输入输出样例 #1输入 #1输出 #1 二、分析三、源代码四、deepseek 一、题目 题目描述 您需要写一种数据结构,来维护一些数(都是绝对值 1 0 9 10^9 109 以内的数)的集合,…...
算法题(114):矩阵距离
审题: 本题需要我们找出所有0距离最近的1的曼哈顿距离 思路: 方法一:多源bfs 分析曼哈顿距离: 求法1:公式法,带入题目公式,利用|x1-x2||y1-y2|求出 求法2:曼哈顿距离就是最短距离 本…...
0102-web架构网站搭建-基础入门-网络安全
文章目录 1. 常规2 站库分离3 前后端分离4 集成环境5 docker6 分配站结语 1. 常规 结构:源码数据都在同服务器 影响:无,常规安全测试手法 2 站库分离 结构:源码和数据库不在同服务器 存储:其他服务器上数据库或者…...
Linux系统编程:进程管理、内存对比与树莓派应用
一、认识进程和线程,在Linux系统下查看系统中各进程的编号pid并终止一个进程pid 1.进程和线程 进程:操作系统分配资源(如内存、CPU时间片)的基本单位。每个进程有独立的内存空间,进程间通信需要较复杂的机制…...
ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞
UE5系列文章目录 文章目录 UE5系列文章目录前言一、问题原因二、设置碰撞2.读入数据 总结 前言 ue5 仿鬼泣5魂类游戏角色和敌人没有碰撞 一、问题原因 在UE5中,角色和敌人没有碰撞可能是由多种原因导致的,以下是一些可能的原因及解决方法:…...
基于Flask的MBA考生成绩查询系统设计与实现
基于Flask的MBA考生成绩查询系统设计与实现 序言 2024年吉林大学MBA在职研究生考试成绩公布后,考生收到的成绩单为PDF格式文档。为方便考生快速查询个人成绩及排名信息,笔者基于Python Flask框架开发了本查询系统。该系统支持关键词模糊查询、序号范围…...
GATT(Generic Attribute Profile)是蓝牙低功耗(Bluetooth Low Energy,简称BLE)协议栈中的一个核心协议
蓝牙的 GATT(Generic Attribute Profile) 是蓝牙低功耗(Bluetooth Low Energy,简称BLE)协议栈中的一个核心协议,用于定义设备如何通过蓝牙进行数据传输和交互。GATT 是基于 ATT(Attribute Proto…...
DHCP之报文格式
字段说明: op (op code): 表示报文的类型,取值为 1 或 2,含义如下 1:客户端请求报 2:服务器响应报文 Secs (seconds):由客户端填充,表示从客户端开始获得 IP 地址或 IP 地址续借后所使用了的秒数,缺省值为 3600s。 F…...
React 文件上传新玩法:Aliyun OSS 加持的智能上传组件
文件上传是前端开发中的“老朋友”,但如何让它既简单又强大,还能无缝对接云端存储?今天,我要带你认识一个超酷的 React 组件 AliUploader,它不仅支持拖拽上传、批量编辑和文件排序,还直接把文件传到 Aliyun…...
群体智能优化算法-变色龙优化算法(Chameleon Swarm Algorithm, CSA,含Matlab源代码)
摘要 变色龙优化算法(Chameleon Swarm Algorithm, CSA)是一种受变色龙行为启发的群体智能优化算法。该算法模拟了变色龙在自然界中通过变换颜色来适应环境的能力,以此为基础,设计了一个适应性强、搜索能力广泛的优化算法。CSA 通…...
使用 React 和 Konva 实现一个在线画板组件
文章目录 一、前言二、Konva.js 介绍三、创建 React 画板项目3.1 安装依赖3.2 创建 CanvasBoard 组件 四、增加画布控制功能4.1 清空画布4.2 撤销 & 重做功能 五、增加颜色和画笔大小选择5.1 选择颜色5.2 选择画笔大小 六、最终效果七、总结 一、前言 在线画板是许多应用&…...
GitHub高级筛选小白使用手册
GitHub高级筛选小白使用手册 GitHub 提供了强大的搜索功能,允许用户通过高级筛选器来精确查找仓库、Issues、Pull Requests、代码等。下面是一些常用的高级筛选用法,帮助你更高效地使用 GitHub 搜索功能。 目录 搜索仓库搜索Issues搜索Pull Requests搜…...
通过第k个最大元素深入浅出快排和堆排序
快排和堆排序在确定k个元素有着得天独厚的优势,原因是无论快排还是堆排序在每一轮排序中均可以确定一个元素 快排:每一轮排序均可以确定一个元素位置堆排序:每一轮排序都可以确定一个最小值或最大值 他们的时间复杂度都是O(nlogk)ÿ…...
NVR接入录像回放平台EasyCVR视频系统守护舌尖上的安全,打造“明厨亮灶”云监管平台
一、方案背景 近年来,餐饮行业食品安全和卫生等问题频发,比如后厨卫生脏乱差等,持续引发关注,这些事情导致连锁反应,使其收益遭受损失。同时,给消费者造成了心理和生理上的伤害。 加强餐饮行业的监管成为…...
Airflow+Spark/Flink vs. Kettle
在迁移亿级(单表超过1.3亿)结构化数据(达梦→星环)的场景下,Airflow(结合分布式计算框架)的综合效果优于Kettle,以下是详细对比与方案建议: 一、核心对比:Air…...
Cribl 导入文件来检查pipeline 的设定规则(eval 等)
Cribl 导入文件来检查pipeline 的设定规则(eval 等) 从这个页面先下载,或者copy 内容来创建pipeline: Reducing Windows XML Events | Cribl Docs...
[C++面试] new、delete相关面试点
一、入门 1、说说new与malloc的基本用途 int* p1 (int*)malloc(sizeof(int)); // C风格 int* p2 new int(10); // C风格,初始化为10 new 是 C 中的运算符,用于在堆上动态分配内存并调用对象的构造函数,会自动计算所需内存…...
一周学会Pandas2 Python数据处理与分析-Jupyter Notebook安装
锋哥原创的Pandas2 Python数据处理与分析 视频教程: 2025版 Pandas2 Python数据处理与分析 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili Jupyter (Project Jupyter | Home)项目是一个非营利性开源项目,于2014年由IPython项目中诞生…...
第30周Java分布式入门 消息队列 RabbitMQ
RabbitMQ章节介绍 一、RabbitMQ概述 RabbitMQ学习内容: 本章节将学习RabbitMQ的概念、安装启动、管理后台、代码实操、交换机工作模式以及Spring Boot整合RabbitMQ。消息队列定义: 消息队列是一种用于在分布式系统中传递消息的机制。消息队列特性: 消息队列具有异步、解耦、削…...
北斗导航 | THE GNSS AMBIGUITY RATIO-TEST REVISITED: A BETTER WAY OF USING IT【论文要点】
THE GNSS AMBIGUITY RATIO-TEST REVISITED: A BETTER WAY OF USING IT 总结该论文的核心贡献及关键方法如下:论文核心内容概述 传统比率测试的局限性 传统比率测试通过比较最优与次优模糊度解的残差平方和比值(即 R = q (...
MySQL 面试知识点详解(索引、存储引擎、事务与隔离级别、MVCC、锁机制、优化)
一、索引基础概念 1 索引是什么? 定义:索引是帮助MySQL高效获取数据的有序数据结构,类似书籍的目录。核心作用:减少磁盘I/O次数,提升查询速度(以空间换时间)。 2 索引的优缺点 优点缺点加速…...
Linux / Windows 下 Mamba / Vim / Vmamba 安装教程及安装包索引
目录 背景0. 前期环境查询/需求分析1. Linux 平台1.1 Mamba1.2 Vim1.3 Vmamba 2. Windows 平台2.1 Mamba2.1.1 Mamba 12.1.2 Mamba 2- 治标不治本- 终极版- 高算力版 2.2 Vim- 治标不治本- 终极版- 高算力版 2.3 Vmamba- 治标不治本- 终极版- 高算力版 3. Linux / Windows 双平…...
deepseek v3-0324 Markdown 编辑器 HTML
Markdown 编辑器 HTML 以下是一个美观的 Markdown 编辑器 HTML 页面,支持多种主题切换和实时预览功能: <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&q…...
视频设备轨迹回放平台EasyCVR如何搭建公共娱乐场所远程视频监控系统
一、背景介绍 由于KTV、酒吧、足疗店等服务场所人员流动频繁、环境复杂,一直是治安管理的重点区域。为有效打击 “黄赌毒”、打架斗殴、寻衅滋事等违法犯罪的活动,打造安全有序的娱乐消费环境,我国相关部门将加大对这类场所的清查与管控力度…...
网络安全基础知识总结
什么是网络安全 采取必要措施,来防范对网络的攻击,侵入,干扰,破坏和非法使用,以及防范一些意外事故,使得网络处于稳定可靠运行的状态,保障网络数据的完整性、保密性、可用性的能力(CIA)。 举例…...
Python设计模式:克隆模式
1. 什么是克隆模式 克隆模式的核心思想是通过复制一个已有的对象(原型)来创建一个新的对象(克隆)。这种方式可以避免重复的初始化过程,从而提高效率。克隆模式通常涉及以下几个方面: 原型对象:…...
【工具】在 Visual Studio 中使用 Dotfuscator 对“C# 类库(DLL)或应用程序(EXE)”进行混淆
在 Visual Studio 中使用 Dotfuscator 进行混淆 Dotfuscator 是 Visual Studio 自带的混淆工具(Dotfuscator Community Edition,简称 CE)。它可以混淆 C# 类库(DLL)或应用程序(EXE),…...
积分赛——获取环境温度
设计要求 从DS18B20温度传感器上获取环境温度,并将其温度值显示到数码管上(保留两位小数)。 当“S4”定义为发送按键,按键S4按下时,串口向PC端发送当前采集的温度值; 串口发送格式: Temp:26.…...
LogicFlow获取锚点数据的自定义key并添加的连接的Edge边数据中
1、重写 PolylineEdgeModel 类(其它 EdgeModel 都可以) class CustomNetWorkNodeEdge extends PolylineEdge { } class CustomNetWorkNodeEdgeModel extends PolylineEdgeModel {getData() {const data super.getData();//获取开始锚点自定义属性添加到…...
【python中级】解压whl文件内容
【python中级】解压whl文件内容 1.背景2.解压1.背景 【python中级】关于whl文件的说明 https://blog.csdn.net/jn10010537/article/details/146979236 补充以上博客: 在 旧版 setuptools 中(< v58),如果想生成 .whl,必须先pip install 安装 wheel 三方包! pip inst…...
