用两个指针就行,一个指针i初始时指向头元素,另一个j指向下标为1的元素(所以说,当长度为1时单独判断,长度为1就返回1)
之后,如果i下标的元素等于j下标的元素,j++,假如到了i和j代表的元素不等时,说明i,j中间这些都是重复元素,都是等于nums[i]的元素,此时,nums[i+1]=nums[j],i++。i的值就是值不重复的元素的个数
class Solution { public int removeDuplicates(int[] nums) { if(nums.length==1) return nums.length; int length=nums.length; int i=0; int j=1; while(j<length) { if(nums[i]==nums[j]) { //i++; //j=i+1; 这样的话,如果刚好遇到前一个数与后一个数相同,就是死循环,所以 //么一次,j自加1 j++; } else { nums[i+1]=nums[j]; i=i+1; j+=1; } } return i+1; } }