zoukankan      html  css  js  c++  java
  • 【leetcode刷题笔记】Remove Duplicates from Sorted Array II

    Follow up for "Remove Duplicates":
    What if duplicates are allowed at most twice?

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

    Your function should return length = 5, and A is now [1,1,2,2,3].


    题解:

    设置两个变量:右边kepler和前向游标forward。如果当前kepeler所指的元素和它下一个元素相等,那么向A中存入这两个相等的元素,然后将forward置为kepeler+2,向前移动,如果碰到的元素都跟当前kepeler所指的元素相等,就忽略,否则,将kepeler移向forward所指元素,继续循环;如果当前kepeler所指的元素和它下一个元素不相等,那么就把这个元素直接加入A中,kepeler前移,继续循环。

    例如题目中给的数组:1,1,1,2,2,3.

    初始kepeler指向第一个1,发现kepeler+1也是一个1,就把forward置为kepeler+2=2,向前探测。探测到index为3的元素时候,发现和kepeler所指的元素不相等,就把kepeler移到索引为3处,继续上述过程,最终得到数组1,1,2,2,3.

    代码如下:

     1 public class Solution {
     2     public int removeDuplicates(int[] A) {
     3         if(A == null || A.length == 0)
     4             return 0;
     5         int kepeler = 0,forward = 0;
     6         int NewSize = 0;
     7         
     8         while(kepeler < A.length){
     9             if(kepeler+1 < A.length && A[kepeler+1] == A[kepeler]){
    10                 A[NewSize++] = A[kepeler];             //相同的元素有两个,都放入数组中
    11                 A[NewSize++] = A[kepeler];
    12                 forward = kepeler+2;
    13                 while(forward < A.length && A[forward] == A[kepeler])
    14                     forward++;
    15                 kepeler = forward;
    16             }
    17             else if(kepeler < A.length){
    18                 A[NewSize++] = A[kepeler];
    19                 kepeler++;
    20             }
    21         }
    22         return NewSize;
    23     }
    24 }
  • 相关阅读:
    GateWay程序分析02_IAP_FLASH.H
    GateWay程序分析05_WDT.h
    GateWay程序分析03_timer.h
    GateWay程序分析_主函数_02整体流程
    网关系统软件设计_系统需求分析v1
    [收藏]DIV中图片居中
    CSS HACK 手记
    一道题“谁养鱼”的穷举解法。
    简单好用的联动下拉控件(修正)
    权限认证的WEB页面实施
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3851680.html
Copyright © 2011-2022 走看看