算法训练营第二天| 27.移除元素

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

分享文章

算法训练营第二天| 27.移除元素
目录视频讲解B站讲解视频移除元素算法概述算法核心思想算法实现步骤看到题目时的第一想法实现过程中遇到的困难代码实现与分析今日收获心得题目链接LeetCode 27. 移除元素视频讲解B站讲解视频移除元素算法概述移除元素是一种常见的数组操作核心思想是通过双指针技术原地修改数组。它通过覆盖或交换元素来移除特定值同时保持剩余元素的相对顺序。适用场景需要原地修改数组且不关心新长度之后元素的场景。时间复杂度O(n)空间复杂度O(1)算法核心思想利用快慢指针技术快指针遍历数组慢指针标记有效元素位置快指针发现非目标值 → 复制到慢指针位置快指针发现目标值 → 跳过不处理 通过这种方式所有非目标值都会被保留在数组前部。算法实现步骤初始化慢指针 left 0 快指针 right 从 0 开始遍历整个数组 当 nums[right] 不等于目标值时将其复制到 nums[left] 位置 递增 left 指针表示已处理一个有效元素 遍历结束后left 即为新数组长度看到题目时的第一想法双指针技术是处理数组原地修改的利器 需要明确指针移动条件和赋值时机 要特别注意空数组和全为目标值的边界情况 保持元素顺序的要求会影响指针移动策略实现过程中遇到的困难初始时不确定是否应该保留元素顺序 快慢指针的移动条件需要仔细推敲 处理全为目标值的数组时返回值容易出错 测试用例中考虑不足如空数组和单元素数组代码实现与分析class Solution { public: int removeElement(vectorint nums, int val) { int left 0; for (int right 0; right nums.size(); right) { if (nums[right] ! val) { nums[left] nums[right]; left; } } return left; } };今日收获心得双指针技术的精妙之处在于用空间换时间通过一次遍历完成筛选和移动 实现时发现边界条件的重要性特别是空数组和全目标值数组的处理 算法看似简单但需要精确控制指针移动和赋值时机 通过这道题深刻理解了原地修改数组的技术要点对指针操作有了更深认识

更多文章