@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,學了下面的課程
因此下面的文章主要是總結回顧之前學到東西,只有不斷地反覆學習,才有新的突破。
之前的系列文章點擊閱讀原文,以前文章發的很多都整理了,微信公眾號不支持修改文章,所以公眾號無法整理專輯。