LeetCode-Remove Element-從排序數組中刪除重複項

描述:

給定一個有序數組,你須要原地刪除其中的重複內容,使每一個元素只出現一次,並返回新的長度。
不要另外定義一個數組,您必須經過用 O(1) 額外內存原地修改輸入的數組來作到這一點。
示例:數組

給定數組: nums = [1,1,2],
你的函數應該返回新長度 2, 而且原數組nums的前兩個元素必須是1和2
不須要理會新的數組長度後面的元素

實現

重複的須要去掉,無非就是遍歷數組,發現重複,就把後面的往前移,把重複值覆蓋掉。具體說,能夠維護2個指針,慢指針開始指向數組第一個元素,快指針指向第二個元素,而後快指針不斷判斷本身當前元素和前一個元素是否相同,相同則快指針後移,不相同則將當前值賦值給慢指針的後一個元素,慢指針後移。最後慢指針指向的元素及前面全部元素都是不重複的。具體過程參考以下代碼和註釋:函數

class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if len(nums) <= 1:
            return len(nums)

        s = 0

        for f in range(1, len(nums)):
            if nums[s] != nums[f]:
                s += 1
                nums[s] = nums[f]
        return s + 1
相關文章
相關標籤/搜索