删除有序数组中的重复项

Bernie


Bernie
删除有序数组中的重复项
思路:
快慢指针
- 用 slow, fast 分别指向 nums 的第一个元素
- 如果 slow 和 fast 指向的元素相同,则 fast 向前移动一位
- 如果 slow 和 fast 指向的元素不同,则 slow 向前移动一位,将 fast 指向的元素赋值给 slow 指向的元素,fast 向前移动一位
- 重复 2,3 步骤,直到 fast 指向最后一个元素
typescript 解法
function removeDuplicates(nums: number[]): number {
const len = nums.length;
if (len == 1) {
return 1;
}
if (len == 2) {
if (nums[0] === nums[1]) {
return 1;
}
}
let slow = 0;
let fast = 1;
let ret = 1;
while (slow < fast && fast < len) {
while (nums[slow] === nums[fast]) {
fast++;
if (fast === len) {
return ret;
}
}
slow++;
nums[slow] = nums[fast];
fast++;
ret++;
}
return ret;
}
go 解法
func removeDuplicates(nums []int) int {
ret := 1
//快慢指针
if len(nums) == 1 {
return 1
}
if len(nums) == 2 && nums[0] == nums[1]{
return 1
}
slow := 0
fast := 1
for slow < fast && fast < len(nums) {
for nums[fast] == nums[slow] {
fast ++
if fast == len(nums) {
return ret
}
}
slow ++
nums[slow] = nums[fast]
fast ++
ret ++
}
return ret
}