C语言详解如何删除有序数组中的重复项
在C语言中,要删除有序数组中的重复项,可以使用双指针法来实现。具体步骤如下:
- 定义两个指针
p
和q
,分别指向数组的第一个元素。 - 使用循环遍历数组,当
q
指针所指向的元素与p
指针所指向的元素相同时,q
指针向后移动一位,即跳过该重复项。 - 当
q
指针所指向的元素与p
指针所指向的元素不同时,将q
指针所指向的元素赋值给p
指针的下一个位置,然后p
指针向后移动一位。这样可以实现在原数组上删除重复元素。 - 循环结束后,数组从
0
到p
指针的位置即为去重后的数组,长度为p+1
。
下面是示例代码:
int removeDuplicates(int* nums, int numsSize){
if (numsSize == 0) return 0;
int p = 0;
for (int q = 1; q < numsSize; q++) {
if (nums[q] != nums[p]) {
nums[++p] = nums[q];
}
}
return p + 1;
}
假设输入的有序数组为[1, 1, 2, 2, 2, 3, 3, 4, 5, 5]
,输出的去重后的数组应该为[1, 2, 3, 4, 5]
,长度为5。运行上述代码可以得到正确的输出。另外,如果输入的数组为空,输出的长度应该为0。
int nums[] = {};
int numsSize = 0;
int len = removeDuplicates(nums, numsSize);
printf("长度为:%d\n", len); //输出:长度为:0
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 详解如何删除有序数组中的重复项 - Python技术站