返回

通过给定基准对数组进行划分(Python)

后端

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 解决方案采用以下步骤进行划分:

  1. 初始化两个空列表 leftright,分别存储小于和大于基准 pivot 的元素。
  2. 遍历数组 nums 中的每个元素 num
  3. 如果 num 小于基准 pivot,则将其添加到 left 列表。
  4. 如果 num 大于基准 pivot,则将其添加到 right 列表。
  5. 如果 num 等于基准 pivot,则将其添加到 left 列表(根据题目要求)。
  6. 最后,将 leftright 列表合并并返回。

示例

考虑以下示例:

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 的元素可以放在数组的任意位置。