萬事開頭難阔墩,開始算法學(xué)習(xí)的第一步,反正也是給自己看的瓶珊,所以沒去博客園啸箫,csdn,無關(guān)名利伞芹,給自己記錄一下學(xué)習(xí)過程忘苛。
回顧一下自己會什么。語言就會個python唱较,數(shù)據(jù)庫會mysql扎唾,mongodb,redis南缓,會爬蟲胸遇,框架會個scrpay『盒危科班出身纸镊,那么我還了解軟工知識,做需求分析分析获雕,面向百度寫報告還是會的薄腻,了解大數(shù)據(jù)方向的知識收捣,會一點數(shù)據(jù)分析届案,常用算法都聽說過,剛剛好找不到工作罢艾。爬蟲這個崗位太難找了楣颠。
開始第一天的學(xué)習(xí)尽纽,從算法開始,首先找刷題網(wǎng)站童漩,以前也刷過力扣弄贿,三五十道差不多,無所謂矫膨,號找不到了差凹,在注冊一個,百度一下什么是算法
算法(Algorithm)是指解題方案的準確而完整的描述侧馅,是一系列解決問題的清晰指令危尿,算法代表著用系統(tǒng)的方法描述解決問題的策略機制。也就是說馁痴,能夠?qū)σ欢ㄒ?guī)范的輸入谊娇,在有限時間內(nèi)獲得所要求的輸出。如果一個算法有缺陷罗晕,或不適合于某個問題济欢,執(zhí)行這個算法將不會解決這個問題。不同的算法可能用不同的時間小渊、空間或效率來完成同樣的任務(wù)法褥。一個算法的優(yōu)劣可以用空間復(fù)雜度與時間復(fù)雜度來衡量。
不清除酬屉,不明白挖胃,無所謂。點擊LeetCode 探索梆惯,從最基礎(chǔ)的開始酱鸭,初級算法,開始再次入門垛吗。
數(shù)組
第一題凹髓,?從排序數(shù)組中刪除重復(fù)項
給定一個排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素怯屉,使得每個元素只出現(xiàn)一次蔚舀,返回移除后數(shù)組的新長度。
不要使用額外的數(shù)組空間锨络,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成赌躺。
說一下有哪些問題,就會用個python羡儿,別的語言C還能寫個hello world礼患,java勉強能讀一下
def removeDuplicates(self, nums: List[int]) -> int:
大致也能理解一下,定義了一個方法,傳入一個參數(shù)缅叠,nums悄泥,應(yīng)該是一個列表,由整形組成的肤粱。
剛開始就遇到問題弹囚,-> 什么意思,沒見過啊领曼。百度鸥鹉。明白了,無所謂庶骄,是個注釋宋舷,->:標記返回函數(shù)注釋。
開始思考瓢姻,python中有數(shù)組這種東西嗎祝蝠,
回憶加百度,python共有六個基本數(shù)據(jù)類型幻碱,數(shù)字绎狭,字符串,列表褥傍,元組儡嘶,集合,字典恍风。
沒找到數(shù)組蹦狂,觀察,基本二字朋贬,百度什么是數(shù)組凯楔,數(shù)組是用于儲存多個相同類型數(shù)據(jù)的集合。
看一下題目锦募,nums:LIst[int]摆屯。嗯,沒什么問題糠亩。那就是列表去重虐骑。
最簡單的方法,列表轉(zhuǎn)集合再轉(zhuǎn)列表赎线,
nums = list(set(nums))
利用集合的互異性廷没,出現(xiàn)問題,集合還有無序性垂寥。要求保持順序颠黎。
方法二另锋,創(chuàng)建一個空列表,對nums遍歷盏缤,不在空列表的放入,得到一個有序的新列表
a = []
for i in nums:
? ? if i not in a:
? ? ? ? a.append(i)
直接寫代碼是有點費勁啊蓖扑,以后截圖吧唉铜,理論上沒問題,但是沒審題律杠,原地刪除重復(fù)的元素潭流,不能建立新的空列表。
方法三柜去,遍歷灰嫉,匹配
不出意外的報錯了,對列表遍歷時改變了列表的長度嗓奢, list index out of range列表索引超出范圍讼撒,len(a)的大小變化了。
改BUG吧股耽,
沒改明白根盒。
找了一下午,沒找到物蝙,發(fā)現(xiàn)一個排序方法
sorted(set(nums),key=nums.index)
日了狗了炎滞,編譯器能好使提交就完犢子????诬乞?册赛??震嫉?森瘪??票堵?
讀題讀題讀題9窭!;怀摹痰驱!啊啊啊瞳浦!
不要拷貝5S场!叫潦!雖然沒明白是什么原理蝇完,但是讀題啊,不要做任何拷貝
至少列表變成集合肯定是有新對象建立。
這道題還有一個坑短蜕,結(jié)果要返回數(shù)組長度氢架,?朋魔?岖研??警检?孙援?什么鬼東西,
也是set方法將數(shù)組轉(zhuǎn)化為集合扇雕,利用集合無序性拓售,sorted方法添加參數(shù)key=nums.index,依照原來的順序排序镶奉。
讀題础淤,有序數(shù)組,那么重復(fù)元素扎堆聚集在一起哨苛,i與i+1對比就行
正常操作一個有序數(shù)組去除值骇,我和下一個不重復(fù),那么我就是不重復(fù)的移国。
首先定義一個i為0吱瘩,while循環(huán),為什么i必須小于len(nums)-1,防止數(shù)組越界迹缀,如果不減1使碾,判斷下一個時最后一個nums【i+1】越界。
如果我等于下一個祝懂,那么我能力票摇,否則我就是下一個。
還可以砚蓬,反正弄出來了矢门,但是這個只能用于有序,無序不行灰蛙,上面的集合排序好使沒毛病祟剔。
寫個這個真費勁,繼續(xù)吧摩梧。這頭開的不咋地啊物延。