题目:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题解:
与Ⅰ不同的是这次题目要求,使得出现次数超过两次的元素只出现两次,所以我用了一个比较粗糙的双指针。
变量k去计数,作为判断是否要删除元素的依据;
同时使用变量r当作返回的数组长度,并且可以当作判断是否超出循环范围的依据,防止死循环。
代码:
- public int removeDuplicates2(int[] nums) {
- int sum=0,r= nums.length;
- boolean a = false;
- for(int i=0;i< nums.length;)
- {
- if(a)
- break;
- int j=i,k=1;
- while(j< nums.length&&nums[j]==nums[i])//判断是否相等
- {
- // System.out.println("k="+k+" i="+i+" j="+j);
- // for(int p=0;p
- // {
- // System.out.print(nums[p]+" ");
- // }
- // System.out.println();
-
- if(j>=r) {//超出循环范围
- a=true;
- break;
- }
- if(k>2)//删除数组元素
- {
- r--;
- int m=nums[j];
- for(int p=j;p+1
- {
- nums[p]=nums[p+1];
- }
- nums[nums.length-1]=m;
- //sum++;
- j--;
- }
- j++;
- k++;
- }
- i=j;
- }
- // System.out.println(r);
- return r;
- }