C语言每日一练---利用双指针的方法删除排序数组中的重复项

给定一个升序排列的数组nums,请原地删除重复出现的元素,使每个元素只出现一次,返回删除后的数组新长度。元素的相对顺序应保持一致。

要求:返回新数组的长度和数组元素,不能使用额外空间,必须在原数组上进行修改。

例:输入:nums = [1,1,2]

输出: 2, nums = [1,2]

定义两个指针fast和slow,fast表示遍历数组到达的下标位置,slow表示下一个不同元素要填入的下标位置,初始两个指针都指向1,假设数组nums的长度为n,那么fast将遍历1到n-1每一个位置,对于每个位置,当前fast指向的数组元素值若不等于fast前一个指向的数组元素值,那么说明当前fast指向的数组元素与之前数组的元素都不相同,因此将nums[fast]的值赋值给nums[slow],然后把slow的值加一,遍历结束后,slow的值就是新的数组的长度。

int removeDuplicates(int* nums, int numsSize)
{
	if (numsSize == 0)
	{
		return 0;
	}
	int fast = 1;
	int slow = 1;
	while (fast < numsSize)
	{
		if (nums[fast] != nums[fast - 1])
		{
			nums[slow] = nums[fast];
			++slow;
		}
		++fast;
	}
	return slow;
}
 

C语言每日一练---利用双指针的方法删除排序数组中的重复项_第1张图片 

题目来源于力扣

你可能感兴趣的:(C语言,c语言,数据结构,leetcode)