消除重复项

题目:
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。
不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

在排序好的数组中删除重复项,这里我写两个方法,一个是自己的暴力破解,一个是官方解。两个算法时间复杂度都为O(n),但是官方解的效率要比我自己的高很多

  • 暴力解
class Solution:
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        l = len(nums)
        if l == 0:
            return l
        t = 0
        for i in range(0,(l - 1)):
            if t >= (l - 1):
                break
            if nums[t] == nums[t + 1]:
                del nums[t]
                l -= 1
                t -= 1
            t += 1
        return len(nums)
        

这里我是对数组进行遍历,相同元素从数组删除,由于判断太多可能对时间影响较大,所以时间较长

  • 官方解
class Solution:
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        if len(nums) == 0:
            return 0
        i = 0
        for j in range(1,len(nums)):
            if nums[i] != nums[j]:
                i += 1
                nums[i] = nums[j]
        return i + 1

官方解用了两个指针,j指针对数组进行遍历,如果不相同则插入到i的下一个位置,这样前i个位置就为数组中消除重复项的值了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 6,038评论 0 13
  • 算法思想贪心思想双指针排序快速选择堆排序桶排序荷兰国旗问题二分查找搜索BFSDFSBacktracking分治动态...
    第六象限阅读 3,359评论 0 0
  • 1 序 2016年6月25日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租...
    RichardJieChen阅读 5,243评论 0 12
  • 在ios中点击标注(BMKAnnotationView)会弹出一个气泡显示信息,我们怎么能默认进入地图后,就显示标...
    xieyinghao阅读 228评论 0 0
  • 【日精进打卡第134天】 姓名:潘艳 企业名称:青柠养车 组别271期谦虚1组 【知~学习】 《六项精进》大纲1遍...
    潘潘_8030阅读 208评论 0 0