用c语言定义一个升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。
时间: 2023-12-19 22:54:05 浏览: 80
删除数组中的重复元素
```c
int removeDuplicates(int* nums, int numsSize){
if (numsSize == 0) return 0;
int slow = 0;
for (int fast = 1; fast < numsSize; fast++) {
if (nums[fast] != nums[slow]) {
slow++;
nums[slow] = nums[fast];
}
}
return slow + 1;
}
```
解题思路:
使用快慢指针,快指针遍历整个数组,当快指针指向的元素与慢指针指向的元素不同时,将慢指针后移一位,并将快指针指向的元素赋值给慢指针指向的位置。最后返回慢指针的位置加一,即为新数组的长度。由于原数组是升序排列的,因此相同的元素一定是连续的,可以使用快慢指针相遇的方式来进行去重。时间复杂度为$O(n)$,空间复杂度为$O(1)$。
阅读全文