给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array
①典型的双指针解法:设置i和j两个指针,分别指向当前已经获得的有序无重复数组的最远下标和当前遍历到的原数组下标,有题可知 i<j 恒成立,通过if(nums[j]!=nums[i] nums[++i]=nums[j]可实现在原数组上原地将非重复的部分有序放在原数组的前段。
②细节部分:原地修改数组;返回值为非重复元素的个数,即得到的数组前段长度;当数组长度小于等于1,必定无重复元素,可直接返回。i为当前得到的非重复数组的最远下标,最终数组的长度为i+1。
class Solution {
public int removeDuplicates(int[] nums) {
//数组内元素为0或1时必定不存在重复元素
if(nums.length<=1) return nums.length;
int i=0,j=1;//双指针
while(j<nums.length){
if(nums[j]!=nums[i]) nums[++i]=nums[j];
j++;
}
return i+1;
}
}