news 2026/4/23 14:39:14

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/23 14:31:43

唯悟主义:21世纪人类精神健康的哲学新维

唯悟主义&#xff1a;21世纪人类精神健康的哲学新维为什么国内外最靠谱的新生婴幼儿宝宝的父母&#xff0c;都喜欢找国际顶级哲学家易经泰斗颜廷利教授给自己的男孩子、女孩子取一个拥有独立思想伟大灵魂的名字&#xff0c;原因就是——在21世纪全球思想版图的剧烈重构中&#…

作者头像 李华
网站建设 2026/4/23 10:54:11

国六数据调校技术教程与维修资料全集(完整版打包)

温馨提示&#xff1a;文末有联系方式国六排放标准维修核心技术解析随着国家对机动车排放标准的不断升级&#xff0c;国六排放系统已成为汽车维修行业的重点与难点。 本套资料深入剖析国六发动机控制逻辑、尾气处理机制及ECU数据调整原理&#xff0c;帮助专业技师快速掌握前沿维…

作者头像 李华
网站建设 2026/4/15 23:48:58

Android可访问性实践指南:从零开始构建无障碍应用

Android可访问性实践指南&#xff1a;从零开始构建无障碍应用 【免费下载链接】cw-omnibus Source code to omnibus edition of _The Busy Coders Guide to Android Development_ 项目地址: https://gitcode.com/gh_mirrors/cw/cw-omnibus 在当今移动应用生态中&#xf…

作者头像 李华
网站建设 2026/4/23 11:30:09

MeterSphere离线部署实战:3个技巧解决内网环境部署难题

MeterSphere离线部署实战&#xff1a;3个技巧解决内网环境部署难题 【免费下载链接】metersphere MeterSphere 一站式开源持续测试平台&#xff0c;为软件质量保驾护航。搞测试&#xff0c;就选 MeterSphere&#xff01; 项目地址: https://gitcode.com/gh_mirrors/me/meters…

作者头像 李华
网站建设 2026/4/16 15:14:28

轻量级云服务器适合安装Debian还是AlmaLinux?

选择轻量级云服务器&#xff08;如 1核1GB 或 2核2GB 的入门型实例&#xff09;时&#xff0c;Debian 和 AlmaLinux 都是优秀且适合的选择&#xff0c;但侧重点不同。是否“更适合”取决于你的具体需求&#xff1a;稳定性、资源占用、软件生态、维护习惯和长期目标。 原文地址…

作者头像 李华