解题思路
思路
将元素删除,移动后面元素向前,最后的元素不管,同时更新长度(利用双指针解决,可以跳过重复元素,减少移动的次数)
代码演示
class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length<3)
return nums.length;
int len=nums.length;
//一组数的前后指针
int pre=0;int next=1;
while (next!=len-1)
{
//相同的数,前指针不变,后指针移动
if(nums[next]==nums[pre])
{
next++;
}
//
else
{
if(next-pre>2)
{
len-=next-pre-2;
for (int i = pre+2; i < len; i++) {
nums[i]=nums[next++];
}
pre=pre+2;
next=pre+1;
}
else
{
pre=next;
next=pre+1;
}
}
}
if(nums[next]==nums[pre]&&next-pre>1)
len-=next-pre-1;
else if(nums[next-1]==nums[pre]&&next-pre>2)
{
len-=next-pre-2;
for (int i = pre+2; i < len; i++) {
nums[i]=nums[next++];
}
}
return len;
}
}
效果
info
解答成功:
执行耗时:1 ms,击败了79.90% 的Java用户
内存消耗:38.7 MB,击败了32.60% 的Java用户