C语言去除数组中的重复元素
时间: 2023-08-31 20:43:25 浏览: 621
删除数组中的重复元素
### 回答1:
可以通过双重循环遍历数组中的每一个元素,然后依次与后面的元素进行比较,如果相同则将后面的元素删除。这样做的时间复杂度为 O(n^2)。代码如下:
```c
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 2, 4, 3, 5, 6, 5};
int n = sizeof(arr) / sizeof(arr[0]);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n;) {
if (arr[j] == arr[i]) {
for (int k = j; k < n; k++) {
arr[k] = arr[k + 1];
}
n--;
} else {
j++;
}
}
}
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
输出结果为:1 2 3 4 5 6
上述代码中,使用了变量 n 记录数组中有效元素的个数,然后在第二个循环中,如果发现有重复元素,则将后面的元素依次向前移动,同时将有效元素的个数减一,以达到删除重复元素的目的。
### 回答2:
要去除C语言数组中的重复元素,可以使用两层循环来判断和删除重复元素。
首先,用一个外部循环遍历整个数组中的元素。内部循环用来比较当前元素与数组中其它元素是否相等。
若当前元素与后续元素相等,则将后续元素依次前移,覆盖重复元素;同时更新原数组的长度。这一过程需要同时修改数组的长度以及重新读取下标,所以要使用一个计数器变量来记录有效元素的个数。
以下是去除数组中重复元素的示例代码:
```c
#include <stdio.h>
void removeDuplicates(int arr[], int* length) {
int i, j, k; // 循环计数器与临时变量
// 遍历数组中的每个元素
for (i = 0; i < *length; i++) {
// 遍历当前元素后面的每个元素
for (j = i + 1; j < *length;) {
// 如果找到重复元素
if (arr[i] == arr[j]) {
// 将后续元素前移
for (k = j; k < *length - 1; k++) {
arr[k] = arr[k + 1];
}
// 更新数组长度
(*length)--;
} else {
// 继续遍历后续元素
j++;
}
}
}
}
int main() {
int i, length = 10;
int arr[] = {4, 6, 2, 8, 4, 6, 1, 3, 2, 8};
printf("原始数组:");
for (i = 0; i < length; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
removeDuplicates(arr, &length);
printf("去重后的数组:");
for (i = 0; i < length; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
输出结果:
```
原始数组:4 6 2 8 4 6 1 3 2 8
去重后的数组:4 6 2 8 1 3
```
在示例代码中,我们定义了一个名为`removeDuplicates`的函数,它接受一个整型数组和一个指向长度的指针作为参数。函数使用嵌套循环的方式来遍历和删除重复元素。最后,我们在`main`函数中调用`removeDuplicates`函数,并显示去除重复元素后的数组。
### 回答3:
在C语言中,去除数组中的重复元素可以通过以下步骤实现:
1. 定义一个新的数组,用于存储去除重复元素后的结果。
2. 遍历原始数组,逐个取出元素。
3. 使用一个标志变量对新数组进行判断,判断该元素是否已经存在于新数组中。
4. 如果元素不存在于新数组中,将其添加到新数组中。
5. 最后得到的新数组即为去除重复元素后的结果。
以下是一个示例代码实现:
```c
#include <stdio.h>
void removeDuplicates(int originalArray[], int n) {
int newArray[n];
int k = 0;
for(int i = 0; i < n; i++) {
int isDuplicate = 0;
for(int j = 0; j < k; j++) {
if(originalArray[i] == newArray[j]) {
isDuplicate = 1;
break;
}
}
if(!isDuplicate) {
newArray[k] = originalArray[i];
k++;
}
}
printf("去除重复元素后的数组:\n");
for(int i = 0; i < k; i++) {
printf("%d ", newArray[i]);
}
}
int main() {
int originalArray[] = {1, 2, 3, 4, 1, 2, 5, 6, 3, 4};
int n = sizeof(originalArray) / sizeof(originalArray[0]);
removeDuplicates(originalArray, n);
return 0;
}
```
运行结果:
```
去除重复元素后的数组:
1 2 3 4 5 6
```
通过上述代码,我们可以将原始数组中的重复元素去除,并得到一个新的数组。
阅读全文