你知道IDE换主题?

2019-09-20 11:35:24 浏览数 (1)

存在重复元素(17)


今日知图

上下左右移动

代码语言:javascript复制
h 左
j 下
k 上
l 右

0.说在前面1.存在重复元素2.Pycharm美化3.作者的话


0.说在前面

本节核心:三种方法解决一道算法题,寻找最优方法!根据交流群的留言,在后文放出Pycharm的主题配置!!!一起嗨起来~~~

回顾

昨日研究了很久的知识图谱终于告一段落,后面会有更深入的知识图谱文章推出,根据我个人学习情况,加入机器学习或者深度学习算法,两者结合,绽放火花!

今日

公众号每周二与周五推出leetcode算法文章,刷的网址是:

https://leetcode-cn.com/explore/interview/card/tencent/

如果你也需要刷算法,我跟老表建立了一个专门算法群(可点击公众号右下角->联系我,进入算法交流群!),每周一与周四两天各刷一道,我公众号周二与周五各更新一篇,今天周六,本来昨日发文,由于昨天将我的知识图谱研究发出去,所以暂缓了一天!

爬虫

由于师弟与师妹需要爬虫知乎取数据,所以我估计会抽空研究知乎爬虫,到时候采用scrapy爬虫,scrapy爬虫的小伙伴们一起来期待!!!

下面我们来一起进入本节文章内容!!!

1.存在重复元素

问题

给定一个整数数组,判断是否存在重复元素。

如果任何值在数组中出现至少两次,函数返回 true。如果数组中每个元素都不相同,则返回 false。

示例 1:

代码语言:javascript复制
输入: [1,2,3,1]
输出: true

示例 2:

代码语言:javascript复制
输入: [1,2,3,4]
输出: false

示例 3:

代码语言:javascript复制
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true

方法一

思路

set去重

然后获得nums去重后的数组与原始数组长度相比较,如果相等,则没有重复元素,返回false,否则不等,有重复元素,返回true。

实现

代码语言:javascript复制
return len(nums) != len(set(nums))

分析

时间与空间复杂度均为O(1)

方法二

思路

字典处理

定义一个字典,遍历给定的list(也就是nums),并向字典中添加list元素,通过查找字典中是否存在当前list的元素来判别给定的list是否有重复元素!

实现

实现一:

代码语言:javascript复制
class Solution:
    def containsDuplicate(self, nums):
        nums_dict = {}
        for i in nums:
            if i in nums_dict:
                return True
            nums_dict[i] = 1
        return False

实现二:

代码语言:javascript复制
class Solution:
    def containsDuplicate(self, nums):
        nums_dict = {}
        for i in range(len(nums)):
            if nums[i] in nums_dict:
                return True
            nums_dict[nums[i]] = 1
        return False

分析

当前这个方法好好分析一下时间与空间复杂度,这里定义了一个字典,空间复杂度为O(n),时间复杂度为O(n)

关键点:当中涉及了字典查找元素,时间复杂度O(1),外层循环一次,时间复杂度O(n),总共为O(n)

方法三

列表处理

思路

定义一个列表,遍历给定的list(也就是nums)),并向新定义的list中添加nums中的元素,通过查找新定义list中是否存在当前list的元素来判别给定的list是否有重复元素!

实现

代码语言:javascript复制
class Solution:
    def containsDuplicate(self, nums):
        nums_list = []
        for i in nums:
            if i in nums_list:
                return True
            nums_list.append(i)
        return False

分析

上面这个时间复杂度为O(n^2),空间复杂度为O(n)

空间复杂度好理解,时间复杂度大家看到的只是一个for循环,为何O(n^2)

原因在于里面list查找时间复杂度为O(n),外层还有一个O(n)的训话,自然就为O(n^2)了,所以leetcode通不过,超时~~

总结

上面介绍了三种方法解决这道简单题!特别是后面的两个方法,字典与列表对比分析,从时间复杂度来研究其优劣!

2.Pycharm美化

下载主题 http://color-themes.com/?view=index

上述是一个主题推荐网址,选择自己喜欢的配色,下载后打开 Pycharm 选择File -> 选择 Import Settings -> 选择 xxxx.jar (你下载的jar包)导入,导入完成后,重启PyCharm即可!

更多Pycharm内容,后面一起分享,这次先来换皮肤,哈哈~~~具体需求,请留言!!

0 人点赞