程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> (每日算法)LeetCode --- Remove Duplicates from Sorted Array II (刪除重復元素II)

(每日算法)LeetCode --- Remove Duplicates from Sorted Array II (刪除重復元素II)

編輯:C++入門知識

(每日算法)LeetCode --- Remove Duplicates from Sorted Array II (刪除重復元素II)


Remove Duplicates from Sorted Array II

Leetcode


題目:

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

給定一個有序表,每個元素最多出現兩次。刪除掉多余的元素,返回剩余元素的個數。

思路:

兩個指針,一個指向合法位置的下一個位置 (index) ,另一個用於遍歷元素 (i) 。兩個指針之間的是無效元素。

這個時候判斷 i 指向的元素和 index - 2 指向的元素是否相同。

相同:說明 i 指向的元素是多余無效的。 i 後移即可。不相同:說明 i 指向的元素是有效的,即出現次數不多於2次。此時,用 i 替換 index 即可。index 需要後移 可在Markdown文檔中查看:點擊打開鏈接

代碼如下:

  1. class Solution {
  2. public:
  3. int removeDuplicates(int A[], int n) {
  4. int deleted = 0; //已經刪除的元素個數
  5. if(n < 3) //最多含有2個元素,一定滿足題意
  6. return n;
  7. int index = 2; //可能不合法的位置
  8. for(int i = 2; i < n; i++)
  9. {
  10. if(A[i] != A[index - 2] )
  11. A[index++] = A[i];
  12. }
  13. return index;
  14. }
  15. };

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved