题目:
给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
解法:
// Solution One -- move distinct element to the front of the array
/**
* @param {number[]} nums
* @return {number}
*/
let removeDuplicates1 = function(nums) {
let len = nums.length;
if(len <= 1){
return len
}else{
let count = 1;
for(let i = 0; i < len; i++){
if(nums[count - 1] !== nums[i]){
nums[count++] = nums[i]
}
}
return count
}
};
// Solution Two -- Double Pointer双指针
let removeDuplicates2 = function(nums){
let p = 0, q = 1;
while(q < nums.length){
if(nums[p] === nums[q]){
q++
}else{
nums[p+1] = nums[q]
p++
q++
}
}
return ++p
}
备注:
双指针的使用方式非常值得参考,毕竟是很经典的算法思路