原创 lightcity 光城 2018-11-10
存在重复元素(17)【今日知图】
上下左右移动
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:
输入: [1,2,3,1]
输出: true
示例 2:
输入: [1,2,3,4]
输出: false
示例 3:
输入: [1,1,1,3,3,4,3,2,4,2]
输出: true
方法一
【思路】
set去重
然后获得nums去重后的数组与原始数组长度相比较,如果相等,则没有重复元素,返回false,否则不等,有重复元素,返回true。
【实现】
return len(nums) != len(set(nums))
【分析】
时间与空间复杂度均为O(1)
方法二
【思路】
字典处理
定义一个字典,遍历给定的list(也就是nums),并向字典中添加list元素,通过查找字典中是否存在当前list的元素来判别给定的list是否有重复元素!
【实现】
实现一:
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
实现二:
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是否有重复元素!
【实现】
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内容,后面一起分享,这次先来换皮肤,哈哈~~~具体需求,请留言!!
3.作者的话
最后,您如果觉得本公众号对您有帮助,欢迎您多多支持,转发,谢谢!
更多内容,请关注本公众号算法系列!