学习时间:
2023年1月16日
题目描述:

题解分享:
// 作 者 : 繁 华 倾 夏
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
// 力扣(LeetCode):26. 删除有序数组中的重复项
// nums:数组 numsSize:数组最大长度
int removeDuplicates(int* nums, int numsSize) {
if (numsSize == 0) { // 一定要判断数组是否为空
return 0;
}
int n1 = 0, n2 = 0; // 此处使用两个变量和三个变量都能解决问题
while (n2 < numsSize) { // 当n2小于numsSize时,代表数组内还有元素存在
if (nums[n2] == nums[n1]) { // 如果相等时则移位,直到找到n1和n2元素不一样时
n2++;
}
else {
n1++; // 因为第一个元素不用覆盖,所以n1++移动一位
nums[n1] = nums[n2]; // 将当前不重复的元素覆盖n1下标
n2++; // 覆盖元素后,移动元素继续比较
}
}
return n1 + 1; // 数组从0开始,统计位数需要加1
}
// 测试用例
// 输入 [0,0,1,1,1,2,2,3,3,4]
// 输出 5, nums = [0,1,2,3,4]
int main() {
int nums[] = { 0,0,1,1,1,2,2,3,3,4 };
int numsSize = sizeof(nums) / sizeof(nums[0]); // 统计数组长度
int re = removeDuplicates(nums, numsSize);
printf("%d,nums = ", re);
for (int i = 0; i < re; i++) {
printf("%d ",nums[i]);
}
return 0;
}
【繁华倾夏】【每日力扣题解分享】【Day2】