【边学边敲边记】LeetCode009:删除排序数组中的重复项

【边学边敲边记】LeetCode009:删除排序数组中的重复项

1、写在前面

LeetCode 第八题 有效的括号 传输门:LeetCode008 : 有效的括号
今天给你们分享的是LeetCode 数组与字符串 第九题:删除排序数组中的重复项,为面试而生,期待你的加入。程序员

2、今日题目

给定一个排序数组,你须要在原地删除重复出现的元素,使得每一个元素只出现一次,返回移除后数组的新长度。面试

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。算法

示例:

示例 1:

给定数组 nums = [1,1,2], 

函数应该返回新的长度 2, 而且原数组 nums 的前两个元素被修改成 1, 2。 

你不须要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,0,1,1,1,2,2,3,3,4],

函数应该返回新的长度 5, 而且原数组 nums 的前五个元素被修改成 0, 1, 2, 3, 4。

你不须要考虑数组中超出新长度后面的元素。

3、 分析

这个题目的话,第一眼看上仍是愣了一下,只能在原列表操做,并且额外空间复杂度得保证为O(1)。数组

不过仔细一想,也还比较好作,由于原列表已经有序,咱们要作的就是把重复元素去除或者移到后面去,由于最后removeDuplicates函数的返回值是最长的无重复列表长度,就好像示例1中的,返回值就为2,打印的结果是修改后的列表的前两个元素[1,2],接下来看看个人思路分析吧:微信

【边学边敲边记】LeetCode009:删除排序数组中的重复项
个人思路markdown

【边学边敲边记】LeetCode009:删除排序数组中的重复项
图解算法ide

4、解题

  • 个人方法:
    时间复杂度:O(n)
    空间复杂度:O(1),符合题意
# 个人方法
class Solution(object):
    def removeDuplicates(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        n = len(nums)
        if n<=0:  # 长度小于或等于1
            return 0
        len_0 = 1
        for i in range(1,n): # for循环向后遍历
            if nums[i] != nums[i-1]:
                nums[len_0] = nums[i]  # 数据替换
                len_0 = len_0 + 1 # 指针后移
        return len_0
  • 提交结果
    【边学边敲边记】LeetCode009:删除排序数组中的重复项
    昨天第一次提交
    【边学边敲边记】LeetCode009:删除排序数组中的重复项
    今天又提交了几回

测试数据:161组
运行时间:44-152ms
击败人百分比:7.95-99.54%函数

  • 最简单解法
    利用set集合去除列表元素,直接改变原列表
    时间复杂度:O(1)
    空间复杂度:O(1)
class Solution():
    def removeDuplicates(self,nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        nums[:] = list(sorted(set(nums)))
        return len(nums)
  • 提交结果
    【边学边敲边记】LeetCode009:删除排序数组中的重复项
    提交5次

测试数据:161组
运行时间:44-80ms
击败人百分比:22.34-99.54%学习

5、疑惑

首先,我今天肯定了,讨论算法优秀,或者最优解,并不能靠提交结果来看,得从时间复杂度和空间复杂度以及实现难度上来看,后面算法刷题我也会注意这一点,多分析复杂度计算。测试

6、结语

不知不觉,一个多月过去了,和本身说一句加油吧,若是你和我同样还在坚持的话~

留一个问题:若是你在面试遇到这个题目,如何快速找出有序列表非重复元素?你会给出那种解答,直接说用set集合就能够去重仍是语重心长的和HR讲思想?或者你会怎么解答这个问题?(留言给出你的答案吧~)

坚持 and 努力 : 终有所获。
【边学边敲边记】LeetCode009:删除排序数组中的重复项

END
维权路上
我今天,摊上了件大事!
往期精彩
避坑法则:程序员必知的42个法律雷区
爬虫 and 数据分析 | 一万条b站评论看工做细胞
LeetCode008:有效的括号
揭开互联网公司的神秘面纱,数据解读那些slay整个行业的互联网公司
进学习交流群
不失联,扫码加X先生微信学习交流

【边学边敲边记】LeetCode009:删除排序数组中的重复项
【边学边敲边记】LeetCode009:删除排序数组中的重复项
舒适提示
欢迎你们转载,转发,留言,点赞支持X先生。
文末广告点一下也是对X先生莫大的支持。
作知识的传播者,随手转发。


更多精彩推荐,请关注咱们

【边学边敲边记】LeetCode009:删除排序数组中的重复项一点支持,向前一大步

相关文章
相关标签/搜索