leetcode27.移除元素[easy](python)

2023-10-17 11:46:35 浏览数 (1)

数组中的简单题,自用

题目描述:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

思路:

由于使用O(1)空间复杂度,所以不能使用新的数据结构去存储,考虑使用首尾指针,设置两个指针,让i指向数组头,让j指向数组尾,使用一个while循环遍历数组,终止条件为头指针大于尾指针。当头指针指向元素等于val时,交换头尾指针指向的值,此时尾指针指着的元素值为val,所以尾指针前移,当头指针指向的元素不等于val,向后移头指针。这样在循环结束后,头指针的长度就是所求长度。

本以为这个思路下,虽然能找到所有元素,但是不一定按照原地修改,所以犹豫了很久,但是还是抱着试一试的心态尝试了一下,结果ac了~,有大佬告诉我为什么吗?

题解(python3):

代码语言:javascript复制
class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        i = 0 # 头指针
        j = len(nums)-1 # 尾指针
        while i <= j:
            if nums[i] == val:
                # 头指针找到目标值
                nums[i], nums[j] = nums[j], nums[i]  # 交换头尾指针所指的值
                j -= 1    # 尾指针后移
            else:
                i  = 1    # 咩有目标值,头指针前移
        return i

补充:

写完题解才发现题目里面强调了元素顺序可以改变~,以后还是要先认真审题啊。

0 人点赞