LeetCode算法学习之--双指针-27. 移除元素

102 阅读1分钟

题目

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

分析

数组里面有特定的值

  1. 因需要满足空间为o(1),所以可以利用快慢指针来出去val 值
  2. 返回慢指针则为新数组的长度

解法:双指针

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

\