[leet code] Remove Duplicates from Sorted Array I & II

来源:互联网 发布:如何复制淘宝商品链接 编辑:程序博客网 时间:2024/05/25 20:01

Remove Duplicates from Sorted Array I :

Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.

Do not allocate extra space for another array, you must do this in place with constant memory.

For example,
Given input array A = [1,1,2],

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

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].

===========

Analysis:

Key points of of these 2 problems: use 2 pointers to overwrite the original array according to the problem requirement.  One pointer is for the original array, +1 every time.  Another pointer is for the overwritten array, +1 when current number not duplicated or not duplicated 2 times (problem II).

Remove Duplicates from Sorted Array I :

public class Solution {    public int removeDuplicates(int[] A) {        // exception case        if (A.length <= 1) return A.length;        int oPointer=1; // pointer for original array        int nPointer=0; // pointer for overwritten array                while (oPointer<A.length){            if(A[oPointer] == A[nPointer]) oPointer++; // duplicate case            else{                nPointer++;                A[nPointer] = A[oPointer];                oPointer++;            }        }        return nPointer+1;    }}

Remove Duplicates from Sorted Array II:

public class Solution {public int removeDuplicates(int[] A) {        if (A.length<3) return A.length;                int nPointer = 1; // pointer for overwritten array        int oPointer = 2; // pointer for original array        while(oPointer<A.length){            if(A[oPointer]==A[nPointer] && A[oPointer]==A[nPointer-1])                 oPointer++;            else{                nPointer++;                A[nPointer] = A[oPointer];                oPointer++;            }        }        return nPointer+1;    }}




0 0
原创粉丝点击