输入: 排好序的数组
输出: 返回不重复的个数,并修改数组为不重复的数组,要求不能使用额外的空间
思路: 循环判断前一个和当前是否相等,循环移动位置.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
|
class { public int removeDuplicates(int[] nums) { if(nums.length==0){ return 0; } int t=nums[0],res=nums.length; int l=0,r=-1,count=0; for(int i=1;i<nums.length-count;i++){ int item = nums[i]; if(item != t){ t = item; r = i-1; int len=r-l; if(len>=1){ move(nums,l,r); count+=len; } i-=len; l = i; } } r = nums.length-count-1; int len=r-l; if(len>=1){ move(nums,l,r); count+=len; } return res - count; }
private void move(int[] nums,int l,int r){ int len=r-l; for(int i=l+1;i<nums.length-len;i++){ nums[i]=nums[i+len]; } } }
|
近期评论