~False:索引塌陷+时间超限 在遍历数组的同时删除元素,会导致索引错位
--执行删除操作 nums.splice(j,1)时,数组后面的元素会整体向前移动一位,填补被删除的空缺;
--场景复现:如果输入是 [1, 1, 1, 2]:
i=0, j=1:发现相同,删掉nums[1]。数组变成[1, 1, 2]。j自增变成2。此时nums[2]是2。- 漏掉了现在索引为
1的那个1
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
let len=nums.length;
for (let i=0;i<len;i++){
for (let j=i+1;j<len;j++){
if (nums[i]==nums[j]){
nums.splice(j,1);
j--;//索引塌陷
}
}
}
return nums.length;
};
~True:双指针(针对有序数组)
/**
* @param {number[]} nums
* @return {number}
*/
var removeDuplicates = function(nums) {
if (nums.length==0) return 0;
let slow=0;
for (let fast=1;fast<nums.length;fast++){
if(nums[fast]!=nums[slow]){
slow++; //先将slow移动到待填的位子上
nums[slow]=nums[fast];
}
}
return slow+1;
};