在有序数组中去除重复项

in Algorithm with 0 comment

在有序数组中去除重复项

前提要求

例如:nums = [1, 1, 2]

解决方案

var removeDuplicates5 = function(nums) {
    let i = -1
    while (++i < nums.length) {
        console.log(i)
        while (nums[i] === nums[i + 1]) {
            console.log(nums)
            nums.splice(i + 1, 1)
        }
    }
    return nums.length
};

注释后的版本

var removeDuplicates5 = function(nums) {
    let i = -1
    // 当 i = 数组长度时,结束循环
    while (++i < nums.length) {
        console.log(i)
        // 因为数组是有序的,如果右边元素等于左边元素,就会删除右边的元素,直到没有才会停止循环
        while (nums[i] === nums[i + 1]) {
            console.log(nums)
            nums.splice(i + 1, 1)
            console.log('删除第 '+ (i+1) + ' 索引的对象')
            console.log('删除后的数组',nums)
        }
    }
    console.log(nums)
    return nums.length
};

var nums = [0,0,1,1,1,2]
var result = removeDuplicates5(nums)
console.log(result)
0
[ 0, 0, 1, 1, 1, 2 ]
删除第 1 索引的对象
删除后的数组 [ 0, 1, 1, 1, 2 ]
1
[ 0, 1, 1, 1, 2 ]
删除第 2 索引的对象
删除后的数组 [ 0, 1, 1, 2 ]
[ 0, 1, 1, 2 ]
删除第 2 索引的对象
删除后的数组 [ 0, 1, 2 ]
2
[ 0, 1, 2 ]
3

难点