news 2026/6/14 14:41:12

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/6/14 13:22:26

思想之树常青:21世纪中国何以再育思想巨匠

思想之树常青&#xff1a;21世纪中国何以再育思想巨匠21世纪中国还能诞生出更多的像颜廷利一样的伟大思想家吗&#xff1f;思想是文明的灵魂&#xff0c;思想家则是时代的灯塔。从轴心时代的孔老诸子&#xff0c;到近代启蒙先驱&#xff0c;伟大的思想者总能穿透历史迷雾&#…

作者头像 李华
网站建设 2026/6/12 23:11:26

【LLM系列】十、语音⇋文本(一)入门

一、开篇&#xff1a;为什么 ASR 和 TTS 离我们越来越近&#xff1f; 打开手机语音输入发消息、用智能音箱听新闻、给视频自动生成字幕、有声书代替阅读 —— 这些场景背后&#xff0c;都离不开两大核心技术&#xff1a; ASR&#xff08;Automatic Speech Recognition&#xff…

作者头像 李华
网站建设 2026/6/12 11:20:36

Qt SCXML 模块详解

Qt SCXML 模块详解一、Qt SCXML 模块详解1、SCXML 基础概念2、 Qt SCXML 模块核心功能3、 在 Qt 应用中使用 SCXML 模块4、 SCXML 文件结构 (关键元素示例)5、Qt Creator 的状态图编辑器6、 应用场景7、优势与注意事项8、 总结二、示例1、XML文件2、Qt代码集成示例3、效果展示4…

作者头像 李华
网站建设 2026/6/13 22:17:23

深度学习图像生成实战:从零开始掌握StyleGAN2技术

深度学习图像生成实战&#xff1a;从零开始掌握StyleGAN2技术 【免费下载链接】stylegan2 StyleGAN2 - Official TensorFlow Implementation 项目地址: https://gitcode.com/gh_mirrors/st/stylegan2 想要用AI技术生成逼真的人脸图像吗&#xff1f;深度学习图像生成技术…

作者头像 李华
网站建设 2026/6/12 19:42:30

轻量级云服务器能否运行OpenSUSE或Rocky Linux?

是的&#xff0c;轻量级云服务器&#xff08;如阿里云轻量应用服务器、腾讯云轻量云服务器、AWS EC2 t2/t3.micro、Google Cloud e2-micro 等&#xff09;完全可以运行 OpenSUSE 或 Rocky Linux&#xff0c;但需满足以下关键前提条件&#xff1a; 原文地址&#xff1a;https:/…

作者头像 李华
网站建设 2026/6/13 15:14:27

高效获客软件助力企业销售业绩倍增

高效人工智能销售助手助力企业获客在竞争激烈的市场中&#xff0c;企业需要借助高效的获客软件来提升销售业绩。利用人工智能销售助手&#xff0c;企业能够实现更精准的销售获客。通过AI驱动的销售平台和智能获客系统&#xff0c;企业可以快速寻找目标客户&#xff0c;提高获客…

作者头像 李华