算法打卡第二天/数组增删改查及双指针法

张开发
2026/4/15 4:45:11 15 分钟阅读

分享文章

算法打卡第二天/数组增删改查及双指针法
一今日学习任务第 2 天 数组增删改查及双指针法今日任务 27. 移除元素题目建议 暴力的解法可以锻炼一下我们的代码实现能力建议先把暴力写法写一遍。 双指针法 是本题的精髓今日需要掌握至于拓展题目可以先不看。题目链接https://leetcode.cn/problems/remove-element/视频讲解https://www.bilibili.com/video/BV12A4y1Z7LP二初次解题思路和思考刚拿到这道题第一反应就是最直白的暴力解法遍历数组遇到等于目标值val的元素就把它后面的所有元素往前挪一位把这个值覆盖掉。这种方法逻辑简单写起来没难度但时间复杂度太高了最坏情况要把整个数组挪一遍效率太差肯定不是最优解。再仔细想题目要求原地修改数组不能用额外空间还得高效那肯定就是用双指针法了。双指针的核心就是用两个指针一个快一个慢一次遍历就把数组处理完直接把时间复杂度从O(n²)降到O(n)完美符合要求。三写代码时核心注意点我最容易搞混的就是两个指针的作用和移动逻辑总结了几个关键要点1. 两个指针到底干嘛用◦ 慢指针指向「新数组」里下一个要放元素的位置◦ 快指针遍历原数组找「不需要移除」的元素2. 什么时候移动指针◦ 快指针一直往后走遍历整个数组◦ 只有当快指针找到不等于val的元素时才把这个元素赋值给慢指针的位置然后慢指针往后挪一位◦ 如果快指针遇到了val直接跳过慢指针不动3. 暴力法的坑暴力法里元素前移之后当前位置要重新检查不然会漏过连续的val这个细节很容易写错。四操作测试示例输入nums [3,2,2,3]val 3输出2新数组为[2,2]输入nums [0,1,2,2,3,0,4,2]val 2输出5新数组为[0,1,3,0,4]五今天收获1. 双指针法是数组原地修改的核心技巧能大幅优化时间复杂度必须吃透2. 暴力法适合练手但面试一定要用双指针体现算法思维3. 数组的元素移动会改变数组长度处理时一定要注意索引的变化避免越界4. 遇到「原地修改数组」「移除元素」这类问题第一反应就该想到双指针

更多文章