题目来源
我的题解
方法一 双指针
left和right分别指向相同元素的左右边界,count记录重复元素的个数,index记录最终数组的长度。
当元素没有重复时,只需要将nums[index]=nums[left];
当元素重复时,需要两次nums[index++]=nums[left++];
时间复杂度:O(n)
空间复杂度:O(1)
public int removeDuplicates(int[] nums) {
int left=0,right=1,n=nums.length;
int count=1;
int index=0;
while(right<n){
while(right<n&&nums[left]==nums[right]){
count++;
right++;
}
if(count==1){
nums[index++]=nums[left++];
}else{
nums[index++]=nums[left++];
nums[index++]=nums[left++];
}
left=right;
right++;
count=1;
}
if(left<n)
nums[index++]=nums[left++];
return index;
}
有任何问题,欢迎评论区交流,欢迎评论区提供其它解题思路(代码),也可以点个赞支持一下作者哈😄~