Remove Duplicates from Sorted Array II,duplicatessorted
本文是在學習中的總結,歡迎轉載但請註明出處:http://blog.csdn.net/pistolove/article/details/43835055
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].
思路:
(1)題意為給定已排好序的整數數組,如果數組中某一元素從第i個位置到第j個位置(i<j)出現n次,若n>2,則需將位置為i+2到j位置上的j-i-2個元素移除,並將位置j後續元素分別前移j-i-2個位置;若n<=2,則無需改變;求去除重複元素後數組大小以及所得數組。
(2)該題考查的是對數組的操作。由於數組是已經排好序的,所以從前往後遍曆一次數組就可以得到結果。在遍曆的過程中,設定變數count記錄重複元素的個數,如果遇到當前元素和後續元素相同,則count++,如果count<3,則當前位置元素不變;如果count>=3,則當前位置元素不存入數組,直到遍曆到下一個數值不同的元素,將下一個出現的數值不同的元素儲存在"遍曆數組時count=3"的位置上,這樣每次遇到連續出現三次或以上的元素時,總是會保留原數組中兩個該元素的值,將多餘的元素值用其後續數值不同的元素按順序替換。最後,遍曆完數組即為所得。詳情見下方代碼。
(3)該題還是比較簡單,需要注意的是對改變元素位置合適時機的正確判斷。希望本文對你有所協助。
演算法代碼實現如下:
/** * @author liqq */public static int removeDuplicates(int[] A) {if(A==null || A.length==0) return 0; int idx = 0; int count = 0; for(int i=0;i<A.length;i++) { if(i>0 && A[i]==A[i-1]) { count++; if(count>=3) continue; } else { count = 1; } A[idx++]=A[i]; } return idx; }