力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路一:快慢指针
在数组中,快慢指针就是两个整数下标,定义 fast 和 slow
这里我们从下标1开始(下标0的数据就1个,没有重复项),如果dest 和 dest-1位置的数据相同,fast++;如果不相同将fast里的数据赋值到slow指向的位置,slow++,fast++。
int removeDuplicates(int* nums, int numsSize){
//定义快慢指针
int fast = 1;
int slow = 1;
//当快指针不指向空时进⾏判断
while(fast <= numsSize-1) {
//判断快指针指向的元素与前⼀个元素是否相同
if(nums[fast] != nums[fast-1]) {
//若不相同,将快指针指向的元素赋值给慢指针指向的元素
nums[slow++] = nums[fast];
}
//快指针后移,继续遍历
fast++;
}
//返回慢指针的值作为数组⻓度
return slow;
}
思路二:新建数组
因为题目要求是原地删除,所以接下来只是简单讲解一下思路,并不会有详细的代码展示。如果感兴趣,可以自己在编译器上实践试试。
将原数组的数据放入新数组中,再放入之前,判断是否有相同数据。
下标 i ( 0 <= i < numsSize)从0开始,直到数组末尾,判断nums[i]与nums[j]是否相同(0<= j <i , j每次循环赋值为0),如果不相同,则将nums[i]放入新数组