zoukankan      html  css  js  c++  java
  • 80. 删除排序数组中的重复项 II




    代码一思路:

    设两个指针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
    
  • 相关阅读:
    Dungeon Master(BFS)
    Shuffle'm Up(串)
    分解素因子
    Snowflake Snow Snowflakes(查找)
    求素数(素数筛选+打表)
    A simple problem(并查集判环)
    Eqs(枚举+ hash)
    Squares(枚举+set 查找)
    从控制台输入10个人的年龄放入数组,将十个人的年龄求总和
    数组
  • 原文地址:https://www.cnblogs.com/panweiwei/p/14024730.html
Copyright © 2011-2022 走看看