LeetCode 27:移除元素 python(双索引法)

本文解析了LeetCode题目27,介绍了如何在不增加额外空间的情况下,通过双指针技巧实现原地移除数组中所有指定值,并返回新数组长度的过程。关键步骤包括判断、交换值和更新索引。

LeetCode 27:移除元素

今日更新,刷题打卡第二题,是《LeetCode 27:移除元素》,自我感觉这道题比上一篇二分查找更简单一点

一、题目

在这里插入图片描述在这里插入图片描述

题目未截全,如有需要,详见 https://leetcode-cn.com/problems/remove-element/

二、解析

​ 题目要求原地移除所有 val 的值,并返回新数组的长度;并且要求空间复杂度是 O(1)。

1.确定空间开销:既然题目是 O(1) 的复杂度,那么就别想新增数组单独存放非val值的方法了,所以还得是在原数组上做动作。

2.使用两个index:使用nums[i] 和 nums[j] 来区分原始数组和修改后的数组
​ i:用来遍历所有的值,判断 nums[i] 和 val 是否相等
​ j:用来存放修改后的值,只有和 val 不相等的才往 nums[j] 里放

3.数组的新长度:在循环中,最后一个 nums[j] = nums[i] 存放完成之后,又做了 j += 1 的动作,所以此时的 j 比下标多 1,刚好等于数组的长度,返回 j 即所求。

三、编码
class Solution:
    def removeElement(self, nums: list[int], val: int) -> int:
        i,j = 0,0
        while i < len(nums):
            if nums[i] != val:
                nums[j] = nums[i]
                i += 1
                j += 1
            else:
                i +=1
        return j
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值