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语言二级,非常遗憾,英语六级不知道报呢还是不报好。

     
  • 相关阅读:
    实例属性 类属性 实例域 类域
    研究数据集
    static 静态域 类域 静态方法 工厂方法 he use of the static keyword to create fields and methods that belong to the class, rather than to an instance of the class 非访问修饰符
    accessor mothod mutator mothod 更改器方法 访问器方法 类的方法可以访问类的任何一个对象的私有域!
    上钻 下钻 切片 转轴 降采样
    识别会话
    Performance Tuning Using Linux Process Management Commands
    Secure Hash Algorithm 3
    grouped differently across partitions
    spark 划分stage Wide vs Narrow Dependencies 窄依赖 宽依赖 解析 作业 job stage 阶段 RDD有向无环图拆分 任务 Task 网络传输和计算开销 任务集 taskset
  • 原文地址:https://www.cnblogs.com/weishun/p/py-algorithm.html
Copyright © 2011-2022 走看看