在有序数组中去除重复项

在有序数组中去除重复项

前提要求

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

  • 去除重复项,处理后的数组应该是 [1, 2]
  • 返回处理后的数组长度,return length // 这里应该是 2
  • 不能使用额外的内存空间,这能在给定的,空间复杂度为 O(1) 的 nums 上进行

解决方案

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

难点

  • 如果用 for 循环的话,删除重复元素后,数组内容减少,索引和对应元素会发生改变,导致跳过目标元素
# ARTS 

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×