remove duplicates from sorted array ii

  • medium
  • tagged: array
  • similar: remove duplicates from sorted array/list

类似题目I, 只是此时说了duplicates可以有k个. 即重复的元素可以有k个.

思路

  • 就是在纸上画, 发现只要判断连续的2个元素是否相同, 不同的话, 则可以复制. 相同的话, 而且是k个的话就可以复制.
  • 但是实际写起来发现很乱!

idea

  • 参考的好的解法.
  • 代码如下:
public int removeDuplicates(int[] nums) {
    if (nums == null || nums.length == 0)  return 0;
    if (nums.length <= 2)  return nums.length;
    int i = 1;
    int cnt = 1;
    for (int j = 1; j < nums.length; ++j) {
      if (nums[j] != nums[j-1]) {
        cnt = 1;
        nums[i++] = nums[j];
      }
      else {
        if (cnt < 2) {
          nums[i++] = nums[j];
          cnt++;
        }
      }
    }
    return i;
}

错误的写法

  • 代码如下
public int removeDuplicatesWRONG(int[] nums) {
    if (nums == null || nums.length == 0)  return 0;
    int pre = nums[0];
    int ptr = 0;
    int cnt = 1;
    for (int i = 1; i < nums.length; ++i) {
      if (pre == nums[i])  cnt++;
      else  cnt = 1;
      if (cnt > 2) {
        while (nums[i] == pre) {
          i++;
          if (i == nums.length-1) break;
        }
        cnt = 1;
        pre = nums[i];
        nums[++ptr] = nums[i];
      }
      else {
        nums[++ptr] = nums[i];
        pre = nums[i];
      }
    }

    return ptr+1;
  }