移除元素)
题目给你一个数组nums和一个值val你需要原地移除所有数值等于val的元素并返回移除后数组的新长度。不要使用额外的数组空间你必须仅使用 O(1) 额外空间并原地修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。核心思想考察双指针用法用两个索引值不同步长的变化来做处理。双指针执行过程示意图flowchart TD A[开始] -- B[i0, slot0] B -- C{i nums.size()?} C -- 是 -- D{nums[i] ! val?} D -- 是 -- E[nums[slot] nums[i]\nslot] E -- F[i] D -- 否 -- F F -- C C -- 否 -- G[返回 slot]简要说明i快指针遍历整个数组检查每个元素。slot慢指针指向下一个可以放置非 val 元素的位置。当nums[i] ! val时将nums[i]复制到nums[slot]然后slot向前移动一位。当nums[i] val时仅i前进slot保持不变。遍历结束后slot即为新数组的长度且nums[0..slot-1]均为非 val 元素。针对本题int removeElement(vectorint nums, int val) { int slot 0; // 存储变化后的数组索引 for (int i 0; i nums.size(); i) { if (nums[i] ! val) { nums[slot] nums[i]; slot; } } return slot; }