Leetcode 移除元素

本文解析了LeetCode第27题“移除元素”的两种解题思路。思路一通过标记和冒泡排序实现,时间复杂度O(n^2)。思路二采用双指针技巧,仅用O(n)时间复杂度完成原地移除指定元素。

Day2 移除元素

这是leetcode的第27题 我是按照类别做的,没有按照顺序。按照顺序直接就是中等了,可能顶不住 = =。

题目

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
在这里插入图片描述
思路一:遍历数组,把和val值相同的元素 赋值为-1,并记录一下有几个这种值。然后冒泡排序一下,把负数挪到数组最后面。然后返回nums.length-len即可。(有点投机取巧,因为给定的测试集都是正数。不可取哈,但毕竟是第一想法,就记录了一下)
在这里插入图片描述
在这里插入图片描述
时间复杂度O(n方)
在这里插入图片描述
思路二:先定义一个“新“数组的下标len,这里的新数组还是在原来的基础上的。并没有构造多余的数组。然后遍历数组,如果元素和val不相等,我们就认为这个元素就是我们想要的,nums[len]=nums[i],len++;如果和val相等我们就跳过不管他,这个位置会留给后面不相等的元素。即使后面没有元素了也没关系,因为返回的是len。所以这个相等的元素不会被访问到。
在这里插入图片描述
时间复杂度在O(n)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值