news 2026/7/10 22:45:23

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/7/5 6:13:57

2026毕设ssm+vue基于的智慧机场管理系统论文+程序

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容———————— 选题背景&#xff08;≈300 字&#xff09; ———————— 关于航班信息一站式服务问题的研究&#xff0c;现有研究主…

作者头像 李华
网站建设 2026/7/9 21:10:59

20251215_WPF入门之拓展方法_Study09

文章目录一.、拓展方法概念二、拓展方法定义三、拓展方法使用四、拓展方法具体示例&#xff1a;五、拓展方法原则总结六、注意事项一.、拓展方法概念 拓展方法允许你向现有的类型&#xff08;包括 .NET Framework 中的类型或你引用的第三方库中的类型&#xff09;"添加&q…

作者头像 李华
网站建设 2026/7/10 16:00:45

Pelco KBD300A 模拟器:05+1.本项目中的链式调用类设计详解

第51篇&#xff1a;Pelco KBD300A 模拟器:本项目中的链式调用类设计详解 —— 优雅、可读、零冗余的 Pelco 协议指令构建方式 在 Pelco KBD300A 模拟器开发过程中&#xff0c;为了让指令发送代码更简洁、直观、易维护&#xff0c;我们引入了**链式调用&#xff08;Method Cha…

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

基于springboot + vue考勤管理系统

考勤管理 目录 基于springboot vue考勤管理系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue考勤管理系统 一、前言 博主介绍&am…

作者头像 李华
网站建设 2026/7/8 23:01:12

基于springboot + vue图书借阅管理系统

图书借阅 目录 基于springboot vue图书借阅管理系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 基于springboot vue图书借阅管理系统 一、前言 博主…

作者头像 李华
网站建设 2026/7/9 19:34:55

淘宝天猫一键重装系统工具,智能装机助手,支持多版本系统傻瓜式安装,新手小白也能轻松上手!

温馨提示&#xff1a;文末有联系方式全能一键重装系统工具&#xff0c;专为新手打造这款专为淘宝、天猫用户设计的一键重装系统软件&#xff0c;又被称为“天猫装机助手”&#xff0c;是一款高效便捷的装机工具。 采用傻瓜式操作界面&#xff0c;即便是毫无电脑基础的小白用户&…

作者头像 李华