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)

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

被折叠的 条评论
为什么被折叠?



