news 2026/4/15 21:21:01

python编程实战(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python编程实战(二)

题目一:

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组是数组中的一个连续部分。

关键数据结构:

列表 List[int],本质上是一维数组

关键思路:

任意一个连续子数组,都是以nums中的某个元素num[i]结尾,用dp[i]表示以nums[i]元素结尾的数组。如果dp[i-1]>0,会让nums[i]变大;反之如果是负数只会让nums[i]变小,不如从nums[i]重新开始。

dp[i]可以通过递归思想来表示,即dp[i]=dp[i-1]+nums[i](i>1);dp[0]=nums[0](i=0)

代码:

class Solution: def maxSubArray(self, nums: List[int]) -> int: # curr_sum 表示以当前元素结尾的最大子数组和 # max_sum 表示全局最大子数组和 curr_sum = max_sum = nums[0] for num in nums[1:]: # 如果 curr_sum 是负数,那么它对 num 没有贡献,应该从 num 重新开始 # 如果 curr_sum 是正数,那么加上 num 可能更好 # 下面的 max(num, curr_sum + num) 就是做这个选择 curr_sum = max(num, curr_sum + num) # 更新全局最大值 max_sum = max(max_sum, curr_sum) return max_sum

题目二:

给定一个整数数组nums,将数组中的元素向右轮转k个位置,其中k是非负数。

关键数据结构:

列表

关键思路:

将一个数组向右轮转k个位置,可以如此理解:

先将整个数组翻转,然后在位置k处将数组分割成两部分,再把两部分的数组翻转回去。

如[1,2,3,4,5,6]向右轮转2个位置,可以先把数组翻转:[6,5,4,3,2,1]

然后分割为[6,5][4,3,2,1]分别翻转,得到[5,6,1,2,3,4],即所要求的结果

显然此种翻转是具有周期性的;当k>>n时,可以通过k%n获得等价翻转次数

代码中通过翻转函数来实现翻转操作,翻转函数本身使用了双指针定义。

代码:

class Solution: def rotate(self, nums: List[int], k: int) -> None: n = len(nums) k = k % n # 辅助反转函数 def reverse(start, end): while start < end: nums[start], nums[end] = nums[end], nums[start] start += 1 end -= 1 # 三次反转 reverse(0, n - 1) # 反转整个数组 reverse(0, k - 1) # 反转前k个 reverse(k, n - 1) # 反转剩余部分

题目三:

以数组intervals表示若干个区间的集合,其中单个区间为intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间

关键数据结构:

List[List[int]],即列表的列表

关键方法:

intervals.sort(key=lambda x: x[0]) 按照x元素中的第一个位置的大小排序

关键思路:

如果要合并重叠区间,最好的方法是首先把区间按左端点大小排列起来,使得可以合并的区间都是相邻的;判断两个区间是否重叠,实际上就是判断一个区间的终点是否大于另一个区间的起点。区间通过列表来表示,区间的集合则通过列表的列表来表示。

代码:

class Solution: def merge(self, intervals: List[List[int]]) -> List[List[int]]: intervals.sort(key=lambda x: x[0]) # 按起点排序 merged = [] for interval in intervals: # 如果结果为空或不重叠,直接添加 if not merged or merged[-1][1] < interval[0]: #merged[-1]表示取merged中最后一个元素 merged.append(interval) else: # 重叠则合并,取最大右端点 merged[-1][1] = max(merged[-1][1], interval[1]) return merged
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 9:24:37

notepad++ 安装

下载地址 https://github.com/notepad-plus-plus/notepad-plus-plus/releases/tag/v8.8.9

作者头像 李华
网站建设 2026/4/15 21:31:56

2026毕设ssm+vue基于的智慧酒店系统论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容关于酒店客房管理系统的研究&#xff0c;现有研究主要以单体酒店或传统 C/S 架构为主&#xff0c;专门针对“SSM&#xff08;SpringSpringM…

作者头像 李华
网站建设 2026/4/16 9:18:24

2025年休闲解压台球手游成新宠,究竟好玩在哪?

在快节奏的现代生活中&#xff0c;人们对于休闲解压的需求日益增长。2025年&#xff0c;休闲解压台球手游成为了新宠&#xff0c;其中《天天台球》更是备受瞩目&#xff0c;那么这类手游究竟好玩在哪呢&#xff1f;真实体验&#xff0c;还原赛场氛围《天天台球》最大的亮点之一…

作者头像 李华
网站建设 2026/4/11 0:24:35

Flink 实时风控系统的万字实战笔记

一、 宏观战场&#xff1a;不只是“快”那么简单很多人对实时风控有个误区&#xff0c;觉得只要用了Flink&#xff0c;接了Kafka&#xff0c;事儿就成了。大错特错。在银行场景下&#xff0c;准确性&#xff08;Accuracy&#xff09;和低延迟&#xff08;Low Latency&#xff0…

作者头像 李华
网站建设 2026/4/16 10:53:49

TypeScript开发全攻略:高效上手

前端TypeScript开发指南&#xff1a;从入门到精通 什么是TypeScript&#xff1f; TypeScript是微软开发的一种开源编程语言&#xff0c;它是JavaScript的超集&#xff0c;为JavaScript添加了静态类型检查。TypeScript最终会被编译成纯JavaScript&#xff0c;可以在任何支持Java…

作者头像 李华
网站建设 2026/4/16 10:53:59

IT疑难杂症

常见问题分类与诊断方法硬件故障&#xff1a;如蓝屏、死机、设备无法识别 软件冲突&#xff1a;系统崩溃、程序无响应、兼容性问题 网络问题&#xff1a;连接失败、速度慢、DNS解析错误 数据安全&#xff1a;病毒攻击、数据丢失、权限异常硬件故障排查流程检查设备连接状态与驱…

作者头像 李华