int removeDuplicates(int* nums, int numsSize) {
if (numsSize == 0) return 0;
int k = 1; // 唯一元素的计数,初始为1,因为第一个元素总是唯一的
// 因为一开始必有一个唯一 下标是从0开始 k是标记元素 也是个数 k-1表达在数组中位置-下标
for (int i = 1; i < numsSize; i++) { // 循环直接跳过0 因为第一个数无需考虑
if (nums[i] != nums[k - 1]) { // 如果当前元素与最后一个唯一元素不同
// 因为k总是跟踪唯一元素 k-1 得到下标
nums[k] = nums[i]; // 将当前元素放到唯一元素的后面
k++; // 增加唯一元素的计数
}
}
return k; // 返回唯一元素的个数
}
// 双下标 一个正常移动 一个用于标记
比较好理解的一个写法吧算是,菜鸡一个,不喜勿喷,纯记录...
思路见代码注释