先用C语言解决这个问题,因为不能使用额外的数组空间,所以只能在原有的数组中通过数组下标来进行赋值操作
int removeDuplicates(int* nums, int numsSize){
int i,s=0;
if(numsSize<2)
return numsSize;
else
{
for(i=1;i<numsSize;i++)
{
if(nums[s]!=nums[i])
{
s++;
nums[s]=nums[i];
}
}
return s+1;
}
}
用JS来做的话会更简单一些,因为可以使用现成的方法
splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目。该方法会改变原数组。
var removeDuplicates = function(nums) {
for(let i=nums.length-1;i>0;i--)
{
if(nums[i]===nums[i-1])
{
nums.splice(i,1);
}
}
return nums.length;
};
看起来是挺简单的,但是我开始的时候也犯了一个错误,我把i初始化为1,然后让nums[i]与nums[i-1]进行比较,这样会出现一个问题就是当我执行splice方法时,原数组的长度已经发生了改变,下标也发生了改变,但是如果我是倒着往前,就不会影响前面的数组下标。