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

2021-02-20 Python之王

@Author:Runsen

@Date:2020/6/4

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

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

從大一寫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,之後等待安裝好就行了

我這個是安裝好的了。

如果你用vscode也是一樣,給我裝vscode插件。

因為,我習慣Python用Pycharm,Java用IDEA,前端用vscode。所以這Runsen使用Pycharm。

然後就是登陸我的Leetcode帳號。

然後就是登錄你的帳號。

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

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

怎麼刷Leetcode以前菜雞的我做法

以前Runsen的做法:

打開leetcode官網的評論區答案,尋找跟我一樣的菜逼

上面其實都是像之前的我,都是菜雞,其實現在我還是菜雞。

分類歸納/總結

刷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,學了下面的課程

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

之前的系列文章點擊閱讀原文,以前文章發的很多都整理了,微信公眾號不支持修改文章,所以公眾號無法整理專輯。

相關焦點

  • leetcode刷題最強指南(版本1.0)
    為什麼會有這篇刷題指南很多剛開始刷題的同學都有一個困惑:面對leetcode上近兩千道題目,從何刷起
  • LeetCode刷題第三周【數組(簡單)】
    python的思路,我們使用循環直接在 num1 的 m 位開始,把 num2 拼接上去。然後做個快速排序即可。Ps:C++中也可以使用python的方法,我會把對應的代碼也附上。要整理的文檔也開始多起來了!加油吧!參考資料[1]Leetcode網站: https://leetcode-cn.com/[2]以上文字描述均來自 LeetCode數組模塊: https://leetcode-cn.com/tag/array/[3]刷題請點擊或見附錄:1539.
  • python大戰leetcode(一)
    對於算法崗,leetcode的重要性就不用多說了。大廠必考,職業生涯的前一半,或多或少都會和它有點關係。
  • 笨方法刷 leetcode(一)
    最近在看leetcode,並且正在上面刷一些簡單級別的題目(不過說真的,這些題真的簡單嗎??或許是我太菜,有些感覺也很難)本篇記錄5道題的解題思路,可能都是最笨的方法題目描述:實現一個算法,確定一個字符串 s 的所有字符是否全都不同示例 1:輸入: s = "leetcode"輸出: false示例 2:輸入: s = "abc"
  • LeetCode 刷題指南(1):為什麼要刷題
    ,不過不可否認刷題確實能鍛鍊我們的編程能力,相信每個認真刷題的人都會有體會。相對其他 OJ 平臺而言,有著下面的幾個優點:下面是我刷 LeetCode 的一些收穫,希望能夠引誘大家有空時刷刷題目。問題:抽象思維波利亞用三本書:《How To Solve It》、《數學的發現》、《數學與猜想》)來試圖闡明人類解決問題的一般性的思維方法,總結起來主要有以下幾種:時刻不忘未知量。即時刻別忘記你到底想要求什麼,問題是什麼。
  • 【Leetcode刷題練Python】1. 兩數之和
    Leetcode,這個大名鼎鼎的刷題神器,對於將要入行碼農行業或已是碼農的猿猿們來說,是必不可少的的練習工具。但可能還有很多小猿們還不知道它。
  • 在IDE中刷LeetCode,刷題效率直線up!
    聽起來有點意思啊,讓我們來看看是怎麼實現的~使用教程安裝:首先,需要安裝插件leetcode-editor:https://plugins.jetbrains.com/plugin/12132-leetcode-editor然後下載文件安裝:https://github.com/shuzijun/leetcode-editor/releases
  • Python 版 LeetCode 刷題筆記 #1 兩數之和
    刷題過程呢,針對每道題目,我打算記錄下自己的思路和解答過程。再根據提交答案的比對,拆解參考答案或者其它優質答案來進行自我的優化,最終給出一個最推薦的解答。也希望這個記錄過程不再僅僅是一個解題,能多一些分析的記錄吧。
  • leetcode-python經典題之一
    今天說下python中的鍊表題。在leetcode中的鍊表題都是給你一個已經建造好的鍊表,然後讓你對其進行各種變化。
  • Leetcode刷題練Python - 2. 兩數相加
    上次推出這個用Python刷題leetcode系列後,有人喜歡有人厭,畢竟眾口難調。廢話少說,繼續刷題。
  • Python刷題之路,怎樣做才能讓技術突飛猛進
    而兩個月過後,她已經開始每天在Leecode上刷題了。雖然有時半夜微信收到她刷題刷到崩潰的消息,或者針對部分Python語法的疑問,但作為一位文職大廠的優秀員工,她卻比很多本該靠著代碼吃飯的人更為努力。
  • LeetCode 刷題指南(一):為什麼要刷題
    作者:數據結構與算法原文連結:selfboot.cn/2016/07/24/leetcode_guide_why/前言雖然刷題一直飽受詬病,不過不可否認刷題確實能鍛鍊我們的編程能力
  • LeetCode 009 Python&Go版本
    按照其特性可以分兩種情況處理,如果該整數個數是奇數的時候,類似下面12321迴文數到3的時候,開始對前面數字的反轉。另一種情況12344321整數個數為偶數,這個時候完全可以將結果平均分為兩部分,一個正序的1234,一個倒序的4321.
  • leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 leetcode之世界觀 什麼是leetcode 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • 來刷 LeetCode 啊
    為什麼要刷LeetCode,刷LeetCode吃力正常嗎?
  • 《LeetCode刷題Java版答案》pdf來了
    很多朋友在後臺留言說,刷LeetCode上的數據結構+算法題時難免會遇到困難,想要找一本答案題解做參考。
  • Leetcode刷題-二分查找
    本文對部分涉及二分查找算法的leetcode題目進行了學習與實踐,並給出了個人的二分查找python模板二分查找算法解釋二分查找算法(英語:binary search algorithm),也稱折半搜索算法(英語:half-interval search algorithm
  • LeetCode按照怎樣的順序來刷題比較好?
    分享一下身邊大神的刷題順序:如果你時間比較緊迫,為了找工作而刷題,我建議你先刷熱門推薦,一共兩百多道題。先刷熱題 HOT 100,再刷精選 TOP 面試題,之後刷其他的題。如果你時間比較充裕,那我建議你:按從低到高的難度分組刷按 tag 分類刷定期複習,重做之前刷過的題掌握 LeetCode 刷題方法再開始刷題,屬於磨刀不誤砍柴工。
  • Python探索之旅 | 第一部分第二課:安裝Python和Python的常用開發軟體
    前言上一課 Python探索之旅 | 第一部分第一課:Python是什麼?中,我們初步認識了什麼是程式語言,也對 Python 的歷史,Python 可以做什麼,為什麼學習 Python 做了一些講解。這一課我們就要開始搭建 Python 的開發環境了,正所謂「工欲善其事,必先利其器」。2.
  • 如何科學的刷 Leetcode
    這是它的官網,https://leetcode.com。Leetcode 官網很久以前,還是在大學的時候,有師兄對我意味深長的說,如果把 Leetcode 上面的題目做上七遍,就有很大概率能夠通過谷歌的面試。雖然有點誇張,這句話還是對我幼小的內心,產生了不小的震撼。