前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode27.移除元素[easy](python)

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

原创
作者头像
从不摸鱼的van
修改2023-10-17 11:46:35
1150
修改2023-10-17 11:46:35
举报
文章被收录于专栏:van的取经之路van的取经之路

数组中的简单题,自用

题目描述:

给你一个数组 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

补充:

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述:
  • 思路:
  • 题解(python3):
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档