vue 生命週期
阿新 • • 發佈:2020-11-22
程式碼一思路:
設兩個指標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