手写算法: 删除有序数组中的重复项
思路
删除数组中重复项,首先我们知道了这是一个有序数组,那么相等的元素在数组中也是连续的,那么可以利用数组的下标
判断当前数组的长度,如果为 0 ,则直接 return0
当数组的长度大于 0 时,数组内的元素至少为一个,那么删除重复数组后,也至少为一个,因此 nums[0]保持原状即可,从下标 1 开始删除元素
用双指针,slow 指针用于指下个不同元素要填入的下标,fast 指针指向到达下标的位置。那么只要 nums[fast] !== nums[fast - 1],就能说明这不是同一元素,可以填入 slow
function removeDuplicates(nums) {
const len = nums.length;
if (len === 0) return 0;
let slow = (fast = 1);
while (fast < len) {
if (nums[fast] !== nums[fast - 1]) {
nums[slow] = nums[fast];
slow++;
}
fast++;
}
return slow;
}
手写题: 实现 OmitThisParameter<T>
type MyOmitThisParameter<T> = T extends (...args: any[]) => infer R ? () => R : never;