Remove Duplicates from Sorted Array II,duplicatessorted

來源:互聯網
上載者:User

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;      }


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.