给定一个排好序的数组,去除数组中重复的元素,保证每个元素只出现一次例如 1,1,2返回1,2 输入输出格式 intf("Please input the arraysize\n") scanf("%d"); for() { printf("Please input the %d-th number\n"); scanf("%d"); } printf("values are %d\n"); for () printf("%d\n"); 函数原型为 int removeDuplicates(int nums[], int numsSize)
时间: 2023-08-06 12:09:40 浏览: 36
好的,你的问题是如何去除排好序数组中的重复元素,保证每个元素只出现一次,函数原型为 int removeDuplicates(int nums[], int numsSize)。
同样可以使用双指针法来解决这个问题。定义两个指针,一个指向当前不重复元素的位置,另一个扫描整个数组。如果扫描到的元素与当前不重复元素相同,则跳过该元素;否则,将该元素复制到当前不重复元素的下一个位置,并将当前不重复元素指针向后移动一位。
下面是代码实现:
```c
int removeDuplicates(int nums[], int numsSize) {
if (numsSize == 0) return 0; // 特判空数组
int i = 0; // 当前不重复元素的位置
for (int j = 1; j < numsSize; j++) {
if (nums[j] != nums[i]) {
nums[++i] = nums[j];
}
}
return i + 1; // 返回不重复元素的个数
}
```
输入可以使用如下代码实现:
```c
int numsSize;
printf("Please input the array size: ");
scanf("%d", &numsSize);
int nums[numsSize];
for (int i = 0; i < numsSize; i++) {
printf("Please input the %d-th number: ", i + 1);
scanf("%d", &nums[i]);
}
```
输出可以使用如下代码实现:
```c
printf("values are: ");
for (int i = 0; i < removeDuplicates(nums, numsSize); i++) {
printf("%d ", nums[i]);
}
printf("\n");
```
时间复杂度为 O(n),空间复杂度为 O(1)。