news 2026/10/13 15:31:11

LeetCode数组题解:5大经典Python实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LeetCode数组题解:5大经典Python实战

以下是针对LeetCode热门题目Top 100 Liked Questions中“普通数组”类题目的Python版本解法指南。普通数组题目通常涉及数组的基本操作,如遍历、排序、查找等。我将逐步介绍几个代表性题目,提供Python代码和简要解释,帮助您理解和实现。

1. Two Sum(两数之和)

题目描述:给定一个整数数组nums和一个目标值target,在数组中找出和为目标值的两个整数,并返回它们的下标。假设只有一个有效解,且不能使用同一个元素两次。

Python解法:

def twoSum(nums, target): num_map = {} for i, num in enumerate(nums): complement = target - num if complement in num_map: return [num_map[complement], i] num_map[num] = i return []

代码解释:

  • 使用哈希表num_map存储每个元素的值和下标。
  • 遍历数组,计算当前元素的补数(target - num)。
  • 如果补数在哈希表中,直接返回下标对。
  • 时间复杂度:$O(n)$,空间复杂度:$O(n)$。

2. Maximum Subarray(最大子数组和)

题目描述:给定一个整数数组nums,找出连续子数组的最大和。

Python解法:

def maxSubArray(nums): max_sum = float('-inf') current_sum = 0 for num in nums: current_sum = max(num, current_sum + num) max_sum = max(max_sum, current_sum) return max_sum

代码解释:

  • 初始化max_sum为负无穷和current_sum为0。
  • 遍历数组,更新current_sum为当前元素或当前元素加上之前的子数组和的最大值。
  • 同时更新max_sum为当前最大值。
  • 时间复杂度:$O(n)$,空间复杂度:$O(1)$。

3. Move Zeroes(移动零)

题目描述:给定一个数组nums,将所有0移动到数组末尾,同时保持非零元素的相对顺序。

Python解法:

def moveZeroes(nums): non_zero_idx = 0 for i in range(len(nums)): if nums[i] != 0: nums[non_zero_idx], nums[i] = nums[i], nums[non_zero_idx] non_zero_idx += 1

代码解释:

  • 使用双指针:non_zero_idx指向非零元素应放置的位置。
  • 遍历数组,当遇到非零元素时,将其与non_zero_idx位置的元素交换,并移动指针。
  • 时间复杂度:$O(n)$,空间复杂度:$O(1)$。

4. Container With Most Water(盛最多水的容器)

题目描述:给定一个整数数组height,表示垂直线的高度,找出两条线与x轴形成的容器能容纳的最大水量。

Python解法:

def maxArea(height): left, right = 0, len(height) - 1 max_area = 0 while left < right: width = right - left h = min(height[left], height[right]) max_area = max(max_area, width * h) if height[left] < height[right]: left += 1 else: right -= 1 return max_area

代码解释:

  • 使用双指针从数组两端向中间移动。
  • 计算当前指针位置形成的容器面积(宽度乘以最小高度)。
  • 更新最大面积,并根据高度移动指针。
  • 时间复杂度:$O(n)$,空间复杂度:$O(1)$。

5. Product of Array Except Self(除自身以外数组的乘积)

题目描述:给定一个数组nums,返回一个数组,其中每个元素是除自身外所有元素的乘积。要求不使用除法,并在$O(n)$时间内完成。

Python解法:

def productExceptSelf(nums): n = len(nums) left_products = [1] * n right_products = [1] * n answer = [1] * n # 计算左侧乘积 for i in range(1, n): left_products[i] = left_products[i-1] * nums[i-1] # 计算右侧乘积 for i in range(n-2, -1, -1): right_products[i] = right_products[i+1] * nums[i+1] # 合并结果 for i in range(n): answer[i] = left_products[i] * right_products[i] return answer

代码解释:

  • 使用三个数组:left_products存储每个元素左侧的累积乘积,right_products存储右侧累积乘积。
  • 先从左向右计算左侧乘积,再从右向左计算右侧乘积。
  • 最后合并结果得到每个位置的乘积。
  • 时间复杂度:$O(n)$,空间复杂度:$O(n)$。

这些题目覆盖了普通数组操作的核心技巧,如双指针、动态规划等。建议您在LeetCode平台上实际练习这些题目,加深理解。如果您有其他具体题目需求,我可以进一步提供帮助!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 6:29:12

安卓驱动开发工程师:深入技术核心,驱动智能未来

深圳达实智能股份有限公司 安卓驱动开发工程师 职位信息 负责安卓系统底层驱动的设计、开发、调试、集成与性能优化工作。 负责Android Framework及内核等系统框架层的调优,关键模块开发实现及调试定位。 系统API设计和开发,安卓SDK定制和维护。 二、 任职要求: 1. 基础要求…

作者头像 李华
网站建设 2026/10/12 23:39:06

协鑫集成高级AI开发工程师职位深度解析:职责、能力与面试指南

协鑫集成 高级AI开发工程师 职位信息 职位详情: 1.探索、跟踪国内外领先的AI技术、产品方案,推动其在公司内应用,提升企业运营效率,生产效率。 2.协调各部门团队,包括研发、工艺、生产、职能等,确保AI项目目标实现。 3.结合AI背景和行业需求,为企业数字化、智能化提供指…

作者头像 李华
网站建设 2026/10/9 0:35:03

Snapd和Apt—Linux 上两种完全不同的软件包管理系统

Snapd 和 Apt 是 Linux 上两种完全不同的软件包管理系统&#xff0c;各有优劣。以下是详细对比&#xff1a; 核心区别一览 特性Apt (传统)Snapd (现代)设计年代1998年 (Debian)2014年 (Ubuntu)软件包格式.deb.snap依赖处理共享系统库&#xff0c;自动解决依赖自带所有依赖&…

作者头像 李华
网站建设 2026/10/11 10:43:01

ESP32 的宝藏开源项目:ESP32 - Bus - Pirate 打造硬件调试瑞士军刀

大家好&#xff0c;我是杂烩君。当你手里拿着一个ESP32开发板&#xff0c;除了做物联网项目&#xff0c;还能干什么&#xff1f; 可以借助ESP32-Bus-Pirate把ESP32板子变成了一把"瑞士军刀"&#xff0c;能够与20多种数字协议和无线协议进行交互。 1. ESP32-Bus-Pir…

作者头像 李华
网站建设 2026/10/11 11:38:10

【ICLR26-加州大学】GEN2SEG:生成模型实现可泛化的实例分割

文章&#xff1a;GEN2SEG: GENERATIVE MODELS ENABLE GENERALIZABLE INSTANCE SEGMENTATION代码&#xff1a;https://reachomk.github.io/gen2seg单位&#xff1a;加州大学戴维斯分校一、问题背景人类仅凭有限经验就能识别各类陌生物体&#xff0c;而传统视觉模型的“零样本迁移…

作者头像 李华
网站建设 2026/10/11 11:37:34

股市估值差异对国际技术标准制定的影响

股市估值差异对国际技术标准制定的影响关键词&#xff1a;股市估值差异、国际技术标准制定、技术创新、市场竞争、产业发展摘要&#xff1a;本文深入探讨了股市估值差异对国际技术标准制定的影响。首先介绍了研究的背景、目的、范围以及预期读者等内容。接着阐述了股市估值差异…

作者头像 李华