📅  最后修改于: 2023-12-03 15:25:18.804000             🧑  作者: Mango
在处理数组时,有时需要将特定值移动到数组的末尾。这个问题可以用双指针解决。
假设数组为 nums
,需要移动的值为 K
。使用两个指针 left
和 right
,初始化为数组开头和结尾。开始遍历数组,当 nums[left]
等于 K
时,将 left
向右移动一位。当 nums[right]
不等于 K
时,将 right
向左移动一位。当 left
和 right
位置重合时,遍历结束。
代码示例:
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
以下是代码的详细解释:
left
和 right
,初始化为数组的开头和结尾。nums[left]
等于 K
,将 left
指向下一个位置。nums[right]
不等于 K
,将 right
指向上一个位置。nums[left]
不等于 K
,且 nums[right]
等于 K
,交换两个数并将 left
和 right
分别移动一个位置。left
和 right
位置重合。最后,返回更新后的数组 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)$。