[数组]——移除元素

【数组】——移除元素

由于数组的存储空间是连续的,不能直接删除元素,只能覆盖

暴力解法:
1.获得数组长度
2.开始第一层循环,寻找要删除的元素(遍历数组元素)
3.寻找到删除元素,开始第二层循环,该元素后的数依次相前移(更新数组)
3.返回数组当前长度

时间复杂度为\(O(n^2)\),空间复杂度为\(O(1)\)

class Solution(object):
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        size = len(nums)
        i=0
        while i<size:
            if nums[i] == val:
                j=i+1
                while j<size:
                    nums[j-1] = nums[j]
                    j=j+1
                i=i-1
                size=size-1
            i=i+1
        return size

双指针法:
1.初始双指针,计算数组长度
2.快慢指针遍历数组(快指针指向非目标元素,赋值给慢指针)
3.快指针寻找到目标元素自加1(两个则自加2),慢指针指向目标元素
4.快指针替换慢指针值(更新数组)
image

图片来源:https://www.programmercarl.com/0027.移除元素.html#思路

时间复杂度\(O(n)\),空间复杂度\(O(1)\)

class Solution(object):
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        slow=0
        fast=0
        size=len(nums)
        while fast<size:
            if val != nums[fast]:
                nums[slow] = nums[fast]
                slow+=1
            fast+=1
        return slow
posted @ 2023-02-07 20:10  我好想睡觉啊  阅读(50)  评论(0)    收藏  举报