leetCode-Remove Duplicates from Sorted Array II

来源:互联网 发布:无印良品文具淘宝 编辑:程序博客网 时间:2024/06/02 18:26

Description:
Follow up for “Remove Duplicates”:
What if duplicates are allowed at most twice?

For example,
Given sorted array nums = [1,1,1,2,2,3],

Your function should return length = 5, with the first five elements of nums being 1, 1, 2, 2 and 3. It doesn’t matter what you leave beyond the new length.

My Solution:

//保留一个指针frontSave,如果nums[i] == frontsave,则count++,如果count > 2,//则将nums[i]之后的所有元素往前移一位,同时减少len,如果nums[i] != frontsave,则//将count置为1,同时将frontsave置为nums[i]class Solution {    public int removeDuplicates(int[] nums) {        int len = nums.length;        if(len <= 2){            return len;        }        int i = 1;        int count = 1;        int frontSave = nums[0];        while(i < len){            if(nums[i] == frontSave){                count++;                if(count > 2){                    moveForward(nums,i);                    len--;                }else{                    i++;                }            }else{                frontSave = nums[i];                count = 1;                i++;            }        }        return len;    }    void moveForward(int[] nums,int index){        for(int i = index;i < nums.length - 1;i++){            nums[i] = nums[i + 1];        }    }}

Better Solution:

//首先初始化一个指针i,i指向去重之后的'新数组',迭代nums,将前两个元素放入新数组且i右//移,当新数组个数大于2时,每放入一个元素之前先判断此元素是否大于nums[i - 2],若大 于,则放入新数组,i右移,否则,n等于nums[i - 2](由于数组已排序),需要去重,忽略即可。class Solution {  public int removeDuplicates(int[] nums) {   int i = 0;   for (int n : nums)      if (i < 2 || n > nums[i - 2])         nums[i++] = n;   return i;}}
阅读全文
0 0