1. 程式人生 > >移除有序陣列中的重複元素

移除有序陣列中的重複元素

Remove Duplicates from Sorted Array 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].

思路:

(1)這道題其實很簡單。主要是因為陣列已經是排好順序的。如果不仔細看題目,把陣列當作無序陣列進行操作,OJ時會顯示超時。

(2)題目要求是不能申請二額外空間,如果提交時有申請額外空間,也是不通過的。

(3)還需要注意的一個地方是,陣列中元素的位置不能改變。比如對於陣列[1,1,1,4,5],移除重複元素後為[1,4,5],起始數字為1,而不能是其它數字。

(4)我們只需對對組遍歷一次,並設定一個計數器,每當遍歷前後元素不相同,計數器加1,並將計數器對應在陣列中位置定位到當前遍歷的元素。

演算法程式碼實現如下:

function removeDuplicateElement2
($arr) {
$len = count($arr); if ($len < 1) return false; $count = 1; for ($i = 1; $i < $len; $i++) { if ($arr[$i] == $arr[$i - 1]) { continue; } else { $arr[$count] = $arr[$i]; $count++; } } return $count
; } echo removeDuplicateElement2([1,2,2,3,4,4,5]); // 另一種方法 類似 function removeDuplicateElement($arr) { if (count($arr) < 1) return false; $i = 0; for ($j = 1; $j < count($arr); $j++) { if ($arr[$j] != $arr[$i]) { $i++; $arr[$i] = $arr[$j]; } } return $i + 1; } echo removeDuplicateElement([1,1,1,3,4]);

演算法複雜度:
時間複雜度 O(n)
空間複雜度 O(1)