给定一个有序数组,你需要原地删除其中的重复内容,使每个元素只出现一次,并返回新的长度。
不要另外定义一个数组,您必须通过用 O(1) 额外内存原地修改输入的数组来做到这一点。
示例:
给定数组: nums = [1,1,2],
你的函数应该返回新长度 2, 并且原数组nums的前两个元素必须是1和2
不需要理会新的数组长度后面的元素.
算法思路:
创建两个变量num,nextnum,初始均指向数组第一个元素。nextnum向后遍历,直到第一个与num指向的元素不同的元素。将nextnum所指元素到赋值给num+1,接着num++。于是,数组第一个元素及其可能的重复元素处理完毕。重复这个过程,直到数组遍历完毕。
代码如下:
int removeDuplicates(int* nums, int numsSize) {
int num=0,nextnum=0;
for(;nextnum<numsSize;nextnum++){
if(nums[num]!=nums[nextnum]){
num++;
nums[num]=nums[nextnum];
}
}
if(numsSize!=0)//当数组不为空时,修改numsSize的值。
numsSize=num+1;
return numsSize;
}