给你一个 非严格递增排列 的数组 nums ,请删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。用c语言编写一段代码
时间: 2024-12-30 10:40:10 浏览: 95
为了解决这个问题,你可以使用C语言中的标准库函数以及循环遍历来完成。这里是一个简单的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
int removeDuplicates(int* nums, int n) {
if (n == 0 || nums == NULL) {
return 0;
}
// 使用一个哈希集合来跟踪已见过的元素
int* set = malloc(sizeof(int)*n);
int unique_count = 0;
for (int i = 0; i < n; ++i) {
if (set[i] == 0) { // 如果这个元素还未在集合中出现过
set[i] = 1; // 标记它作为已知元素
++unique_count; // 增加唯一元素的数量
}
}
// 返回唯一元素的数量,即新数组的长度
return unique_count;
}
int main() {
int nums[] = {1, 2, 2, 3, 4, 4, 4};
int n = sizeof(nums) / sizeof(nums[0]);
int new_length = removeDuplicates(nums, n);
printf("新数组的长度为:%d\n", new_length);
// 打印去重后的数组
for (int i = 0; i < new_length; ++i) {
printf("%d ", nums[i]);
}
printf("\n");
free(set); // 释放内存
return 0;
}
```
这段代码首先检查输入数组是否为空,然后创建一个大小等于输入数组的新整数数组`set`,用于表示哪些元素已经出现过。遍历输入数组`nums`,如果`set`中的相应位置为0,则将该位置设为1,并增加唯一元素计数。最后返回`unique_count`作为新数组的长度。
在`main`函数中,我们打印出新数组的长度并展示去重后的数组内容。
阅读全文
相关推荐
















