原地删除排序数组的重复项,返回移除后的数组长度。要求空间复杂度O(1)。

//第一次尝试:
//本题我认为和LeetCode-27.移除元素思想类似,这里我们也是使用双针指针的方法,设置两个标志flag、idx,一个计数位count,
//最一开始让flag==nums[0],也就是数组首元素;idx从第二的元素开始,也就是idx=1;count从0开始,count=0;
//因为数组是有序的,所以从头开始(i=0开始)遍历数组,如果遇到与flag相同的元素就跳过该元素,如果遇到和flag不同的元素,那么就将该元素放到idx位置,然后idx++,count++
#include<stdio.h> #include<stdlib.h> int removeDuplicates(int* nums, int numsSize) {
if (nums == NULL){
return nums;
}
int idx = 1; int flag = nums[0]; int count = 1; for (int i = 1; i < numsSize; i++) { if (flag != nums[i]) { nums[idx++] = nums[i]; flag = nums[i]; count++; } } return count; } int main() { int num[] = { 1,2,2,3,6,8,8,9 }; int ret = removeDuplicates(num, sizeof(num) / sizeof(num[0])); for (int i = 0; i < ret; i++) { printf("%d\n", num[i]); } return 0; }