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

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

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

在数组操作中,有时你需要将数组中的一些特定值移到它的末尾,而其他值保持原状。本文介绍了一种解决这个问题的方法。

方法一:使用双指针
算法

维护一个指针 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() 函数
算法

使用 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)。具体方法选择取决于实际情况。