LeetCode-27. 移除元素(JavaScript)

222 阅读1分钟

题目链接:leetcode-cn.com/problems/re…

https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/1ae376132bd74c8e8889d65d72cf1554~tplv-k3u1fbpfcp-zoom-1.image

解法:

还是采用快慢指针的办法, 跟 26 题相似

快指针先去遍历整个数组,找到跟 val 不相等的值,就告诉慢指针,你存一下这个东西

慢指针就听快指针的,存完后,它往前爬一步,准备存下一个

所以慢指针存的都是不相等的

最后返回的时候,慢指针往前爬了多少步,就返回多少,比如最后 slow 是 7,从 0 - 7,爬了 7步,慢指针存的东西只是从 nums[0]nums[6]

/**
 * @param {number[]} nums
 * @param {number} val
 * @return {number}
 */
var removeElement = function(nums, val) {
    if(nums.lenght < 1) return nums
    let slow = 0, fast = 0
    while(fast < nums.length) {
        // 快指针找到跟 val 不相等的,就告诉慢指针,存一下
        if(nums[fast] !== val) {
            nums[slow] = nums[fast]
            // 慢指针存完后,往前一步
            slow ++
        }
        fast ++
    }
    // 慢指针往前走了几步,长度就是几
    return slow
};