题目
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
分析
数组里面有特定的值
- 因需要满足空间为o(1),所以可以利用快慢指针来出去val 值
- 返回慢指针则为新数组的长度
解法:双指针
var removeElement = function (nums, val) {
//定义慢指针j
let j = 0;
for (let i = 0; i < nums.length; i++) {
// 快指针遇到了不是val的就把它放在慢指针的位置,同时慢指针向右移动
if (nums[i] !== val) {
nums[j] = nums[i];
j++;
}
}
return j;
};
//时间复杂度:O(n)
//空间复杂度:O(1)
总结
今天这道题是主要是练习使用双指针来除去多余的数字类题目
大家可以看看我分享的一个专栏(前端搞算法)里面有更多关于算法的题目的分享,希望能够帮到大家,我会尽量保持每天晚上更新,如果喜欢的麻烦帮我点个赞,十分感谢
大家如果对“TS”感兴趣的可以看看我的专栏 (TypeScript常用知识),感谢大家的支持
文章内容目的在于学习讨论与分享学习算法过程中的心得体会,文中部分素材来源网络,如有侵权,请联系删除,邮箱 182450609@qq.com
\