1 双指针-快慢指针(Java实现)
/*
方法:双指针-快慢指针
难度:简单
思路:要求不使用额外空间(在原数组中操作)
使用快慢指针依次比较两指针元素:
相同时,仅继续移动快指针;
不同时,先移动慢指针,并使用快指针元素赋值;再继续移动快指针。
时间复杂度:O(n)
空间复杂度:O(1)
类似题目:t083
*/
public class Solution {
public int removeDuplicates(int[] nums) {
if(nums.length == 0) return 0;
int slow = 0; //慢指针
int fast = 1; //快指针
//循环移动指针
while(fast < nums.length){
if(nums[fast] != nums[slow]){ //两指针元素不同时
//移动慢指针
slow ++;
//修改慢指针移动后索引对应的数组值 → [0~slow]子数组的元素均不重复
nums[slow] = nums[fast];
}
fast ++;
}
//返回新数组的长度
return slow + 1;
}
}