Leetcode面试经典150题-移除元素

题目描述

思考过程

  1. 必要步骤:比对元素,找到与val相同的元素
  2. 选择方法:暴力解法,新创数组,把合适的元素填进去。指针法,利用数组的下标灵活变动元素。
  3. 确定切入点:是选择 nums[i] == val 还是选择 nums[i] != val。作者的想法是移动不等于val元素,变换下标,所以要选择nums[i] != val 。如果选择操作处理的是等于val的元素,目前没有想到好的方法

解题方法

      利用数组下标,变换元素。一般这种方法称为快慢指针。

1.当nums[i] != val 时 ,nums[m] == nums[i], i++,m++

2.当nums[i] == val 时,i++,m不变。

3.i为了找到与val不同的元素下标,然后赋值给nums[m]

4.i走得比m快,会覆盖val元素,也不会漏掉其它元素

复杂度

  • 时间复杂度:O(n),其中 n 是输入列表 nums 的长度。
  • 空间复杂度:O(1),只使用了常数级别的额外空间。

时间复杂度:时间复杂度主要由 for 循环决定,该循环会遍历整个列nums,长度为 n。在每次循环中,执行常数时间的操作,包括比较和赋值操作(nums[m] = nums[i] 和 m += 1)。因此,时间复杂度为 O(n)

空间复杂度:空间复杂度是由算法本身使用的额外空间决定的。在这段代码中,并没有使用额外的数据结构,只是在原地修改输入列表 nums。因此,空间复杂度为 O(1),即常数空间复杂度。

Code

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        m=0
        for i in range(len(nums)):
            if nums[i] != val :
                nums[m] = nums[i]
                m += 1
        return m 

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值