删除有序数组中的重复项
代码贴一下
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,并且当找到重复项删除一个元素后,原数组的长度和每个下标对应的值都变了,需要及时的重置下标,再进行比较