LeetCode - 26. 删除有序数组中的重复项 (C语言,快慢指针,配图)

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
​​​​​​​LeetCode - 26. 删除有序数组中的重复项 (C语言,快慢指针,配图)_第1张图片

       

思路一:快慢指针

        在数组中,快慢指针就是两个整数下标,定义 fast slow

        这里我们从下标1开始(下标0的数据就1个,没有重复项),如果dest 和 dest-1位置的数据相同,fast++;如果不相同将fast里的数据赋值到slow指向的位置,slow++,fast++。

LeetCode - 26. 删除有序数组中的重复项 (C语言,快慢指针,配图)_第2张图片

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;
}

思路二:新建数组

        因为题目要求是原地删除,所以接下来只是简单讲解一下思路,并不会有详细的代码展示。如果感兴趣,可以自己在编译器上实践试试。

        将原数组的数据放入新数组中,再放入之前,判断是否有相同数据。

LeetCode - 26. 删除有序数组中的重复项 (C语言,快慢指针,配图)_第3张图片

        下标 i ( 0 <= i < numsSize)从0开始,直到数组末尾,判断nums[i]与nums[j]是否相同(0<= j ,如果不相同,则将nums[i]放入新数组

你可能感兴趣的:(LeetCode,刷题总结,leetcode,c语言,算法)