新年快乐,开工大吉,开始摸鱼

844 阅读1分钟

删除有序数组中的重复项

0208.png

代码贴一下

function removeDuplicates(nums: number[]): number {
    for(let i = 0; i < nums.length - 1; i++){
        if(nums[i] === nums[i+1]){
            nums.splice(i, 1);
            i--;
        }
    }
    return nums.length;
};
  • 思路:要求删除nums内的重复元素,就是去重,但是不能出现额外的数组空间,就是只能在原数组上操作,不能生成新数组来保存、转化。代码用了数组的splice方法,直接在原数组上删除重复的。
  • 题目提示nums数组内的每一项都是按照升序排列的,所以如果有重复项的话,它们一定是紧挨着的,所以不需要遍历两次去找重复项,重复一次,比较当前项和后一项就行。
  • 涉及到前后取值,所以在遍历取值的时候边界需要注意下,需要让nums[i+1]刚好取到最后一项,所以i < nums.length - 1,并且当找到重复项删除一个元素后,原数组的长度和每个下标对应的值都变了,需要及时的重置下标,再进行比较