Leetcode 26.删除有序数组中的重复项
给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。
不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。
示例 :
输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。
快慢双指针法
移动快的指针用来判断数组是否满足条件,移动慢的指针则保存答案的值
1.go语言
func removeDuplicates(nums []int) int {
if len(nums)==0{
return 0
}
slow,fast:=0,0//使用slow保存答案数组的值
for fast<len(nums)-1{
if nums[fast]!=nums[fast+1]{//遇到不相同的数时,存下fast+1的值
slow++
nums[slow]=nums[fast+1]
}
fast++
}
return slow+1
}
func main() {
nums:=[]int{0,0,2,2,2,3,3,3}//示例数组
receive:=removeDuplicates(nums)//接受新数组的长度
answer:=nums[0:receive]//声明切片以输出答案
fmt.Println(receive,answer)
}
2.c语言
int removeDuplicates(int* nums, int numsSize){
if(nums==NULL||numsSize==0)
return 0;
int slow=0;
for(int fast=0;fast<numsSize-1;fast++)
{
if(nums[fast]!=nums[fast+1])
{
slow++;//统计数组中无重复数字
nums[slow]=nums[fast+1];
}
}
return slow+1;
}