標籤:

【初級】從排序數組中刪除重複項

問題:

給定一個有序數組,你需要原地刪除其中的重複內容,使每個元素只出現一次,並返回新的長度

不要另外定義一個數組,您必須通過用 O(1) 額外內存原地修改輸入的數組來做到這一點。

思路:

這道題作為刷leetcode開題之作,寫了好幾個小時 ==,一直各種報錯,原因是沒好好讀題,邏輯架構不清,之前一直返回修改後的數組,在自己編輯器里跑沒問題,但是一提交答案就報錯。這道題需要注意以下幾點:

  • 已知是有序列表了,因此無需排序,若需要排序可用 .sort(列表名),只需要比較相鄰元素是否相同。
  • 不能定義新的數組,百度得到的很多答案都是定義了新的數組,自己剛開始也忽略了這一點導致一直報錯。
  • 最後返回的是列表的長度

綜上使用循環遍曆數組,比較相鄰元素是否相同,定義一個指針用於定位當前元素。

nums = [1,1,2]if len(nums) == 0: return 0if len(nums) == 1: return 1index = 0for i in nums[1:]: if i != nums[index]: index += 1 nums[index] = ireturn index + 1

同時若題目無需結果是原來的順序的話,可以使用python內置函數set()

nums = sorted(set(nums), key = nums.index)


推薦閱讀:

[leetcode algorithms]題目14
[leetcode algorithms]題目16
020 Valid Parentheses[E]
[leetcode algorithms]題目4

TAG:LeetCode | 數組 |