返回
通过给定基准对数组进行划分(Python)
后端
2023-12-18 17:40:36
LeetCode 2161:基于给定基准划分数组
在编程领域,算法是解决问题的重要工具。LeetCode 提供了一个平台,供程序员磨练他们的算法技能,其中一个中等难度的题目是 2161:基于给定基准划分数组。本文将深入探讨这个题目,提供一个清晰易懂的 Python 解决方案。
题目概述
LeetCode 2161 题要求我们对一个整数数组 nums 进行划分,根据给定的基准值 pivot,将数组元素重新排列,满足以下条件:
- 小于基准 pivot 的元素放在数组的左边
- 大于基准 pivot 的元素放在数组的右边
- 等于基准 pivot 的元素可以放在数组的任意位置
我们的目标是返回划分后的数组。
Python 解决方案
以下 Python 代码提供了此题目的一个简洁解决方案:
def partition_array(nums, pivot):
"""
对数组 nums 按照给定的基准 pivot 进行划分。
参数:
nums: 输入数组
pivot: 划分基准
返回:
划分后的数组
"""
left, right = [], []
for num in nums:
if num < pivot:
left.append(num)
elif num > pivot:
right.append(num)
else:
left.append(num)
return left + right
代码解析
此 Python 解决方案采用以下步骤进行划分:
- 初始化两个空列表
left
和right
,分别存储小于和大于基准 pivot 的元素。 - 遍历数组
nums
中的每个元素num
。 - 如果
num
小于基准 pivot,则将其添加到left
列表。 - 如果
num
大于基准 pivot,则将其添加到right
列表。 - 如果
num
等于基准 pivot,则将其添加到left
列表(根据题目要求)。 - 最后,将
left
和right
列表合并并返回。
示例
考虑以下示例:
nums = [9, 12, 5, 10, 14, 3, 10]
pivot = 10
应用我们的 partition_array
函数,我们会得到以下划分结果:
[9, 5, 3, 10, 10, 12, 14]
代码优化
为了优化代码效率,我们可以使用原地算法来执行划分,无需创建额外的列表。我们可以使用快速排序算法将数组排序,然后在基准 pivot 处将数组分成两部分。
总结
通过理解题意并使用适当的 Python 代码,我们可以有效地解决 LeetCode 2161:基于给定基准划分数组。本教程提供了清晰的步骤和示例,帮助您轻松理解和实现解决方案。
常见问题解答
1. 划分数组的时间复杂度是多少?
- 时间复杂度为 O(n),其中 n 是数组 nums 的长度。
2. 划分数组的空间复杂度是多少?
- 空间复杂度为 O(n),因为我们需要创建额外的列表来存储元素。
3. 如何优化代码效率?
- 使用原地算法和快速排序算法进行优化。
4. 是否可以在数组中有多个基准 pivot?
- 此题目只考虑单个基准 pivot。
5. 如果数组中没有等于基准 pivot 的元素会怎样?
- 根据题目,等于基准 pivot 的元素可以放在数组的任意位置。