当前位置: 首页 > news >正文

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
http://www.jsqmd.com/news/92427/

相关文章:

  • 文昌链:集成 TIBC 精简跨链通信协议,支持异构网络互联互通
  • 2026毕设ssm+vue基于的智慧机场管理系统论文+程序
  • 【2025最新】ShareX下载安装教程:轻松玩转截图与录屏功能
  • 2026毕设ssm+vue基于的智慧停车软件论文+程序
  • 【超详细】Lively Wallpaper 下载安装教程|免费开源动态壁纸软件,新手3分钟上手
  • 告别繁琐,拥抱从容:背景调查开启企业人才管理新篇章
  • 学术破茧新纪元:书匠策AI如何重塑毕业论文的“研“值与效率?
  • 接口性能压测场景设计:策略、指标与实践路径
  • 2025年五大门禁通道闸机品牌排行榜,贤松闸机产品质量怎样? - 工业推荐榜
  • 安捷伦53210A 53220A 53230A频率计数器
  • 2025年专业联想服务器SR660V2/V3及配件服务公司排 - 工业品牌热点
  • notepad++ 安装
  • 2025智能客服年度性价比榜:适合中小企业的智能客服机器人十大品牌 - 品牌2025
  • 2025年12月真空悬浮炉制造商/供应商/生产商推荐,产品还覆盖真空电弧炉/真空感应熔炼炉/真空烧结炉/真空连铸炉/真空蒸馏炉/真空甩带炉,性价比高 - 品牌推荐大师1
  • 唯悟主义:21世纪人类精神健康的哲学新维
  • 用友 新道 U8+ 安装教程
  • 音视频项目框架 - 实践
  • 罗德与施瓦茨SMCV100B SMBV100A信号发生器
  • Qt SCXML 模块详解
  • 2025开源推理新标杆:DeepSeek-R1-Distill-Llama-70B如何重塑企业AI落地成本
  • 冰点还原安装破解
  • TNS Listener远程数据投毒漏洞(CVE-2012-1675)
  • 并网式光伏气象站
  • 第七十三篇:Docker基础:镜像、容器、仓库与Dockerfile深度解析
  • 基于springboot + vue考勤管理系统
  • 31、Vim实用功能与技巧全解析
  • 通用X5风格效果器调试工具 支持多型号DSP设备
  • 2026毕设ssm+vue基于的智慧校园安防综合管理系统论文+程序
  • ESP32-P4摄像头开发终极方案:从零打造高清视觉系统
  • Vue.draggable.next:重新定义Vue 3拖拽交互体验