六十4、開始刷Leetcode之旅(Python版本)

@Author:Runsen前端

@Date:2020/6/4git

人生最重要的不是所站的位置,而是心裏所朝的方向。只要我在每篇博文中寫得本身體會,修煉身心;在天天的不斷重複學習中,耐住寂寞,練就真功,不畏艱難,奮勇前行,不忘初心,砥礪前行,人生定會有所收穫,不留遺憾 (做者:Runsen )github

做者介紹:Runsen目前大三下學期,專業化學工程與工藝,大學沉迷日語,Python, Java和一系列數據分析軟件。致使翹課嚴重,專業排名中下。.在大學60%的時間,都在CSDN。決定今天比昨天要更加努力。web

從大一寫Python文章,到如今其都有上百篇,如今到了六十四,我以爲這個時候應該去刷題了,其實不少學Python的都不是專科的,都是給培訓機構宣傳牛逼,其實在編程語言中,Python是最簡單,最沒有難度的編程語言。我在以後的文章都更新數據結構和Leetcode。都用Python解決的方法。其實Leetcode上的一部分題我都基本刷過,那麼我就開始吧。算法

註冊Leetcode帳號

目前Leetcod有國際和中文的兩個版本,下圖就是個人中文版本,刷的不夠,其實我也挺菜的。這個是中文的網址:https://leetcode-cn.com/problemset/all/編程

下圖就是個人國際版本,其實我主要在國際版混日子,刷了100多題,其實我很菜的。這是它的官網,https://leetcode.com。數組

不一樣點,非中國區的人多點,作完了也能夠參考下老外是用什麼思路作的,挺好的。因此你比要到非中國區,看看老外是怎麼幹的。微信

Pycharm裝Leetcode插件

直接打開Pycharm,依次點擊File-Settings-Plugins-Maketplace ,而後在搜索框輸入leetcode,就會顯示咱們的leetcode editor插件,點擊Install,跳出的界面點檢accept,以後等待安裝好就好了數據結構

我這個是安裝好的了。app

若是你用vscode也是同樣,給我裝vscode插件。

由於,我習慣Python用Pycharm,Java用IDEA,前端用vscode。因此這Runsen使用Pycharm。

而後就是登錄個人Leetcode帳號。

而後就是登陸你的帳號。

點擊右下角,選擇刷新或者加載按鈕,就能夠獲取到leetcode中題庫了,根據顏色能夠區分題目的難易程度: 綠色-中等;黃色-簡單; 紅色-困難

更詳細的使用說明參考文檔:https://github.com/shuzijun/leetcode-editor

怎麼刷Leetcode

之前菜雞的我作法

之前Runsen的作法:

  1. 打開leetcode
  2. 啓動Pycharm
  3. 開始思考,冷靜分析
  4. 打開leetcode官網的評論區答案,尋找跟我同樣的菜逼
  5. 滿意離開評論區

上面其實都是像以前的我,都是菜雞,其實如今我仍是菜雞。

分類概括/總結

刷Leetcode,必須分類概括/總結

(1)、數組和相關題型

對於算法題,仍是有不少種題型須要去總結的,若是你懂這個題型,之後遇到相似的題,相信很快就能作出來的。有哪些題型能夠總結呢?答是很是多,例如:

(1)、給你一個非負數的數組,求最大子數組和的長度

這算是一個題型,關於這個題型,有不少種變形、拓展,這裏建議一塊兒概括總結,例如:

(2)、剛纔給的數組是非負數的,如今變一下,給的數組是可正可負。

還能繼續拓展嗎?答是能夠的,例如:

(3)、給你個矩陣(即二維數組),求最大子矩陣和的面積

還有嗎?有,例如剛纔是求最大和,如今我改爲求最大乘積。

我實際上是想告訴你,對於前期的學習,我建議分類刷題,總結題型,像我上面舉的這些例子,遇到類似的,就直接能夠秒殺了,由於這類題,沒啥邊界或者規律。

關於題型的,仍是不少的,我這裏沒法一一給你列舉,只能靠你刷題的過程當中,進行分類、總結。不過我能夠給你推薦一些資料,後面推薦。下面我在說一些題型吧。

三分學七分練

三分學七分練,這是我從極客時間的覃超,前Facebook工程師,傳授的方法。

俗話說:學鋼琴,三分學,七分練。其中練習是最爲重要的一個環節,想學好鋼琴必須得時常練習且多多益善。

因此刷Leetcode的最大的弊端都是:缺少練習。

兩數相加

那麼咱們就開始幹他,Leetcode中的Hello World就是兩數相加。

這個題是我2018年碰見了,如今2020年半,兩年多時間。

#給定一個整數數組 nums 和一個目標值 target,請你在該數組中找出和爲目標值的那 兩個 整數,並返回他們的數組下標。 
#
# 你能夠假設每種輸入只會對應一個答案。可是,數組中同一個元素不能使用兩遍。 
#
# 示例: 
#
# 給定 nums = [2, 7, 11, 15], target = 9
#
#由於 nums[0] + nums[1] = 2 + 7 = 9
#因此返回 [0, 1]

# Related Topics 數組 哈希表

其實這一題真的很簡單,無非就是將「昂貴」的時間複雜度轉換成「廉價」的空間複雜度,把雙重遍歷,變成一次遍歷。

這裏最佳的方法就是使用字典。下面是我去年的代碼,就是三種的解決方法。

列表解法

def twoSum_1( nums, target):
result = []
for i in range (len(nums)):
onenum = nums[i]
twonum = target - onenum
if twonum in nums:
j = nums.index(twonum)
if i != j:
result.append(i)
result.append(j)
return result

字典解法

def twoSum_2(nums,target):
dict={}
for i in range(len(nums)):
m = nums[i]
if target-m in dict:
return [dict[target-m],i]
dict[m] = i

字典推導式

def twosum_3(nums,target):
l = len(nums)
dict = {nums[i]:i for i in range(l)}
print(dict)
for j in range(l):
a = nums[j]
b = target - a
if b in dict and j != dict[b]:
return [j,dict[b]]

關於學習課程

在以前深刻Leetcode,學了下面的課程

所以下面的文章主要是總結回顧以前學到東西,只有不斷地反覆學習,纔有新的突破。

以前的系列文章點擊閱讀原文,之前文章發的不少都整理了,微信公衆號不支持修改文章,因此公衆號沒法整理專輯


本文分享自微信公衆號 - Python之王(sen13717378202)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索