📌  相关文章
📜  将所有等于 K 的值移动到数组的末尾(1)

📅  最后修改于: 2023-12-03 15:25:18.804000             🧑  作者: Mango

将所有等于 K 的值移动到数组的末尾

在处理数组时,有时需要将特定值移动到数组的末尾。这个问题可以用双指针解决。

假设数组为 nums,需要移动的值为 K。使用两个指针 leftright,初始化为数组开头和结尾。开始遍历数组,当 nums[left] 等于 K 时,将 left 向右移动一位。当 nums[right] 不等于 K 时,将 right 向左移动一位。当 leftright 位置重合时,遍历结束。

代码示例:

def move_K_to_end(nums, K):
    left, right = 0, len(nums) - 1
    while left < right:
        if nums[left] == K:
            left += 1
        elif nums[right] != K:
            right -= 1
        else:
            nums[left], nums[right] = nums[right], nums[left]
            left += 1
            right -= 1
    return nums

以下是代码的详细解释:

  1. 定义两个指针 leftright,初始化为数组的开头和结尾。
  2. 如果 nums[left] 等于 K,将 left 指向下一个位置。
  3. 如果 nums[right] 不等于 K,将 right 指向上一个位置。
  4. 如果 nums[left] 不等于 K,且 nums[right] 等于 K,交换两个数并将 leftright 分别移动一个位置。
  5. 重复步骤 2-4,直到 leftright 位置重合。

最后,返回更新后的数组 nums

可以使用以下测试代码来测试 move_K_to_end 函数的输出结果:

nums = [3, 2, 1, 5, 2, 3, 4, 5]
K = 3
result = move_K_to_end(nums, K)
print(result)

输出结果应为:

[2, 1, 5, 2, 4, 5, 3, 3]

由于算法只遍历一次数组,时间复杂度为 $O(n)$。