【数据结构】数组 | 双指针法

74 阅读1分钟

题目 27. 移除元素 - 力扣(LeetCode)

image.png

解题思路

思路问题改进
单个指针遍历,删除后整合操作数组两次双指针
双指针两个指针分别指向什么一个指向遍历数组位置(fast)
一个指向新数组位置(slow)
返回值新数组长度?需要新定义一个量吗slow慢指针的值

代码

class Solution {
    public int removeElement(int[] nums, int val) {
        int fast = 0;
        int slow = 0;
        while(fast < nums.length){
            if(nums[fast] != val) {
            // 更新数值 移动慢指针
                nums[slow] = nums[fast];
                slow ++;
            }
            // 移动快指针
            fast ++;
        }
        return slow;
    }
}

总结

移除元素用到了最经典的双指针解法,难点在于理解快慢指针在做什么

快指针:遍历当前数组元素

慢指针:指向新数组的下一位

建议阅读代码随想录的动图演示,自己在稿纸上推演一遍

image.png
图片来源(侵删)--代码随想录 (programmercarl.com)