1. 程式人生 > 實用技巧 >vue 生命週期

vue 生命週期




程式碼一思路:

設兩個指標cur、i,cur是有效元素下標,初值為0,i是從第一個元素開始的遍歷指標;另外用count記錄當前相同元素的個數;

i和cur指向的元素相同且count值小於2,說明cur指向的元素出現第二次,為有效元素,cur、i右移,count計數器加1;

i和cur指向的元素相同且count值不小於2,說明cur指向的元素出現已經大於兩次,此後均是非有效元素,cur不動,僅i右移;

i和cur指向的元素不同,說明遇到新元素,為有效元素,cur、i右移,count計數器重置為1;

返回值是有效元素個數,即cur+1。

class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        if not n:
            return 0
        count = 1
        cur = 0
        i = 1
        while i < n:
            # i和cur指向的元素相同且count值小於2,說明cur指向的元素出現第二次,為有效元素,cur、i右移,count計數器加1;
            if nums[i] == nums[cur] and count < 2:
                cur += 1
                nums[cur] = nums[i]
                count += 1
                i += 1
            # i和cur指向的元素相同且count值不小於2,說明cur指向的元素出現已經大於兩次
            elif nums[i] == nums[cur] and count >= 2:
                i += 1
            # i和cur指向的元素不同,說明遇到新元素,為有效元素
            elif nums[i] != nums[cur]:
                cur += 1
                nums[cur] = nums[i]
                count = 1
                i += 1
        return cur + 1

程式碼二:程式碼一思路的優化。

因為元素是有序的,可以直接用nums[i]和nums[i-2]進行判斷,如果相等,那麼說明重複的元素一定超過了兩個,當前元素需要跳過。

class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        i = 0
        for item in nums:
            if i < 2 or nums[i - 2] != item:
                nums[i] = item
                i += 1
        return i