Skip to content

用快慢指针方法比较简单。我的方法是从当前元素swap到后面来实现,其中要考虑到最后复制的位置信息。

快慢指针方法

其中快指针指向不等于val的数组下标 慢指针指向当前新数组(要返回的)下标的位置

javascript
var removeElement = function(nums, val) {
    var slowIndex = 0;

    for(let fastIndex =0;fastIndex<nums.length;fastIndex++) {
        if (nums[fastIndex] !== val) {
            nums[slowIndex] = nums[fastIndex]
            slowIndex++;
        }
    }

    return slowIndex;
}

我的方法,复制到末尾

javascript
var removeElement = function(nums, val) {
    //不改变原数组的长度,只是交换
    let currentIndex = 0;

    let lastNotEqualToValIndex = nums.length - 1
    //考虑到只有一种元素
    while (currentIndex <= lastNotEqualToValIndex) {
        const current = nums[currentIndex]
        if (current === val) {
            //swap
            //before swap, find the latest not equal val index
            while (nums[lastNotEqualToValIndex] === val && lastNotEqualToValIndex > currentIndex) {
                lastNotEqualToValIndex--;
            }

            //console.log('currentindex', currentIndex, lastNotEqualToValIndex)
            nums[currentIndex] = nums[lastNotEqualToValIndex]
            nums[lastNotEqualToValIndex] = current;

            lastNotEqualToValIndex--;
        }
        currentIndex++;
    }

    return lastNotEqualToValIndex + 1
};

上次更新于: