先上题:
给定一个增序排列数组
nums
,你需要在 原地 删除重复出现的元素,使得每个元素最多出现两次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
一个循环解决
var removeDuplicates = function (nums) {
for (let i = 0; i < nums.length; i++) {
nums.splice(
nums.indexOf(nums[i]),
nums.lastIndexOf(nums[i]) - nums.indexOf(nums[i]) - 1
);
}
};
再优化,做个过滤
var removeDuplicates = function (nums) {
for (let i = 0; i < nums.length; i++) {
if (nums.indexOf(nums[i]) === nums.lastIndexOf(nums[i])) {
continue;
}
if (nums.lastIndexOf(nums[i]) - nums.indexOf(nums[i]) === 1) {
i++;
continue;
}
nums.splice(
nums.indexOf(nums[i]),
nums.lastIndexOf(nums[i]) - nums.indexOf(nums[i]) - 1
);
}
};