你知道IDE換主題?

  • 2019 年 10 月 5 日
  • 筆記

存在重複元素(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內容,後面一起分享,這次先來換皮膚,哈哈~~~具體需求,請留言!!