寒假挑战PythonTip(一人一python)总结——算法是程序的灵魂,程序员的心法
2014年2月中旬,我上升到挑戰python英雄榜第3名。這是我寒假修煉算法的成果之一。來一下總結吧!
?
Linux的創始人Linus Torvalds在一次演講中有一段涉及“什么才是優秀程序員”的話:
“爛程序員關心的是代碼。好程序員關心的是數據結構和它們之間的關系。”
由這句話的啟發開始,加上我越來越覺得自己編程能力不足,碼代碼經常要重構,邏輯思維不過細膩謹慎。正是過于關注代碼,完成率所致。我已經學過C/C++/nasm/java/python/html/js/jq/shell等等語言,對計算機世界的工作原理有比較好的認識,但代碼能力一直上不去。我想算法,就是我的瓶頸。于是有了以下故事。
寒假開始,我便在項目工作之余掃pythontip上的題。十幾天里,有時一天7、8道題,有時2、3題,我的排名慢慢從第N頁到第4頁到第2頁,讓后到第1頁。當我掃完101題后,我成功了42題,剛好排在第一頁最后一名。然后我休息了一下,繼續有成功幾題。這大概就是我的無算法時代極限了。
第二階段,我網搜博客,算法,學習排序。好來買了《編程珠璣》和《編程之美》,邊看邊攻克pyhtontip上的題目。
在PythonTip 上的一些水題這博客中學習了很多,尤其是看到問題一句話就解決時,恍然大悟。
1、有很多利用lambda, reduce, map, zip, 列表分片/解析, sum, max, min, divmod, round, hex/oct/bin;?set,list,dict; 一句話解決的。這是我認為python強大原因,非常好用。
2、關于二進制‘1’的處理是非常妙的,這些題往往詮釋了計算機較人類思維不同的特性,以及如何能讓程序員思考得更“計算機”一些。在《編程之美》,上面提到的博客中都有提到。
3、獨立思考,讓后比較,我獲得更多。在最大連續子序列,最大非連續子序列,最長回文子字符串中,我收獲很經典的算法。同時還想出來與Manacher算法一拼的做法。
L = '#'.join(list(L)) # len is odd now! l = len(L)o,r=0,0 # 圓心,半徑(不計圓心) for i in range(1,l):if i+r<l and L[i-r:i] == L[i+r:i:-1]: # 移到:最右方便來計算o,r=i,rwhile i+r+1<l and L[i-r-1] == L[i+r+1]:r += 1# print L[o-r:o+r+1]L1 = L[o-r:o+r+1] t1,t2 = L1[::2],L1[1::2]print t1 if any(i!='#' for i in t1) else t2
3月13日的 格式優化版:
L = '#'.join(L) L = '#'+L+'#' # 因為這句,末尾print語句統一了。o,r = 0,0 l = len(L) for i in xrange(l):if i+r >= l:breakif L[i-r:i]==L[i+r:i:-1]:o = ij = r+1 # 嘗試加一while o-j>=0 and o+j<l and L[o-j] == L[o+j]:j += 1r = j-1print L[o-r+1:o+r:2]?
又經過10多天,我又掃完一遍題,這次我以72題的成績排在GodIsCoding和YOSHINO之后第三名。
python是很美很簡單語言,如其名。
題外話:
沒能及時報考C語言二級,非常遺憾,英語六級不知道報呢還是不報好。
轉載于:https://www.cnblogs.com/weishun/p/py-algorithm.html
總結
以上是生活随笔為你收集整理的寒假挑战PythonTip(一人一python)总结——算法是程序的灵魂,程序员的心法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 新做了一个项目,一个人做的,关于数据传输
- 下一篇: ThinkPHP框架搭建网站