删除有序数组中的相同数c语言
时间: 2024-11-27 16:24:24 浏览: 4
在C语言中,删除有序数组中的相同数可以采用双指针法,也称为“跳跃”或“滑动窗口”的算法。这个过程可以分为以下几个步骤:
1. 定义两个指针,`left` 和 `right`,初始位置都指向数组的第一个元素。
2. 创建一个新的数组或者只保留每个元素第一次出现的位置,因为数组已经是有序的,所以只需要存储不同的值。
3. 遍历数组,从`left`到`right`:
a. 如果`arr[left]`等于`arr[right]`,说明找到了重复的元素,将`right`向右移动一位。
b. 否则,如果`arr[left]`小于`arr[right]`,说明`arr[left]`是不同的,将它复制到新数组(或者原数组的新位置),然后`left`向右移动一位。
c. 重复步骤b,直到`right`到达数组末尾。
4. 当遍历结束后,`left`指针所在位置就是新数组的结束位置。
以下是简单的示例代码:
```c
#include <stdio.h>
void removeDuplicates(int arr[], int n) {
if (n == 0 || n == 1)
return;
int i = 0; // 新数组的索引
for (int j = 1; j < n; ++j) {
if (arr[j] != arr[i]) { // 如果当前元素与已存元素不同
arr[++i] = arr[j]; // 将元素放入新数组并更新索引
}
}
// 更新原数组大小为去重后的长度
arr[n] = '\0'; // 使用'\0'标记数组结尾,也可以用其他整数
n = i + 1;
}
// 测试函数
void printArray(int arr[], int n) {
for (int i = 0; i <= n; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int arr[] = {1, 1, 2, 2, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
removeDuplicates(arr, n);
printf("去除重复后的数组:");
printArray(arr, n);
return 0;
}
```
运行上述代码,你会得到去重后的数组:1 2 3 4 5。
阅读全文