用c语言给你一个 非严格递增排列 的数组 nums ,请删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。 输入描述 非严格递增排列 的数组 nums 输出描述 新的数组长度 用例输入 1 1 1 2 用例输出 1 2
时间: 2024-12-22 12:16:42 浏览: 7
在 C 语言中,你可以通过遍历数组并利用哈希表(例如使用布尔数组或者整型数组作为散列表)来解决这个问题。遍历过程中,如果当前元素不在哈希表中,则将其添加到结果数组,并将对应的哈希位置设为 true 或者标记为已处理。遍历完成后,返回哈希表大小即为新数组的长度,因为这代表了唯一的元素个数。
以下是基本的算法步骤:
1. 初始化一个空的结果数组和一个与输入数组等长的布尔数组用于记录是否处理过。
2. 遍历输入数组 `nums`,对于每个元素 `num`:
- 如果 `nums[i]` 对应的布尔值为 false(表示未处理),则将它添加到结果数组,同时将该位置的布尔值设为 true。
3. 返回布尔数组中 true 的个数,即为新数组的长度。
用例输入 1 示例:
```c
int nums[] = {1, 1, 2};
int length = sizeof(nums) / sizeof(nums[0]);
int result[length]; // 假设我们有一个与nums同样长度的结果数组
bool processed[length]; // 初始化所有元素为 false
for (int i = 0; i < length; i++) {
if (!processed[i]) {
result[index++] = nums[i]; // 将未处理的元素添加到结果
processed[i] = true;
}
}
// 返回 index,表示新数组长度
return index;
```
用例输出 1 :在这个例子中,由于有两个相同的数字1,所以最终结果只有一个1,因此返回长度为1。
阅读全文