zoukankan      html  css  js  c++  java
  • 寒假挑战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,r
            while 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:
            break
        if L[i-r:i]==L[i+r:i:-1]:
            o = i
            
            j = r+1 # 尝试加一
            while o-j>=0 and o+j<l and L[o-j] == L[o+j]:
                j += 1
            r = j-1
        
    print L[o-r+1:o+r:2]
    

      又经过10多天,我又扫完一遍题,这次我以72题的成绩排在GodIsCodingYOSHINO之后第三名。

      python是很美很简单语言,如其名。

    题外话:

      没能及时报考C语言二级,非常遗憾,英语六级不知道报呢还是不报好。

     
  • 相关阅读:
    Git和SVN之间的五个基本区别
    如何成为一名程序员:我的道路
    产品经理要懂多少技术?
    Unix哲学相关资源汇总
    Android.mk简介
    Android 中的 Service 全面总结
    获取Map集合中数据的方法
    少编码多思考:代码越多 问题越多
    【自定义Android带图片和文字的ImageButton】
    Android task process thread 进程与线程
  • 原文地址:https://www.cnblogs.com/weishun/p/py-algorithm.html
Copyright © 2011-2022 走看看