题目
给你一个升序排列的数组 nums ,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持 一致 。然后返回nums中唯一元素的个数。
链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array
题解
1、分别设置3个指针src1、src2、dst,src1和dst指向数组第一个元素,src2指向数组第二个元素。比较src1和src2所指的值是否相同,若相同,则src2++;若不同,则把src2的值赋给dst+1所指的位置,然后dst++,src1++。最后dst+1即数组元素去重后的大小(因为dst是数组下标,从0开始,所以需要+1)。
分析如下:
代码如下:
int removeDuplicates(int* nums, int numsSize) { int src1 = 0; int src2 = 1; int tmp = 0; while (src2 < numsSize) { if (nums[src1] == nums[src2]) src2++; else { nums[++tmp] = nums[src2]; src1++; } } return tmp + 1; }
2、设置2个指针src和dst,dst指向数组第一个元素,src指向数组元素第二个元素。比较src和dst所指向的位置的元素是否相同,若相同,src++;若不同,则把src所指元素赋给dst+1所指位置,然后dst++,src++。
代码如下:
int removeDuplicates(int* nums, int numsSize) { int src = 1; int dst = 0; while (src < numsSize) { if (nums[src] == nums[dst]) src++; else nums[++dst] = nums[src++]; } return dst + 1; }