📅  最后修改于: 2023-12-03 15:39:17.241000             🧑  作者: Mango
在数组操作中,有时你需要将数组中的一些特定值移到它的末尾,而其他值保持原状。本文介绍了一种解决这个问题的方法。
维护一个指针 left,初始值为 0,一个指针 right,初始值为数组的长度减一。在移动指针时,如果左指针对应的值等于 K,同时交换左右指针对应的值,将其移动到右边。如果右指针对应的值也等于 K,那么将右指针向左移动。
def move_all_k_to_end(arr, k):
left, right = 0, len(arr) - 1
while left < right:
if arr[left] == k:
arr[left], arr[right] = arr[right], arr[left]
right -= 1
else:
left += 1
return arr
时间复杂度:O(n)
arr = [1, 2, 0, 4, 0, 5, 0, 3]
k = 0
print(move_all_k_to_end(arr, k))
输出:
[1, 2, 3, 4, 5, 0, 0, 0]
使用 filter()
函数来筛选出不等于 K 的元素,随后将其加上所有等于 K 的元素。
def move_all_k_to_end(arr, k):
return list(filter(lambda x: x != k, arr))) + [k] * arr.count(k)
时间复杂度:O(n)
arr = [1, 2, 0, 4, 0, 5, 0, 3]
k = 0
print(move_all_k_to_end(arr, k))
输出:
[1, 2, 4, 5, 3, 0, 0, 0]
本文介绍了两种解决将所有等于 K 的值移到数组的末尾的方法。第一种方法使用了双指针,时间复杂度为 O(n);第二种方法使用了 filter()
函数,时间复杂度同样为 O(n)。具体方法选择取决于实际情况。