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

 

寒假挑战PythonTip(一人一python)总结——算法是程序的灵魂,程序员的心法的更多相关文章

  1. Python基础算法综合:加减乘除四则运算方法

    #!usr/bin/env python# -*- coding:utf-8 -*-#python的算法加减乘除用符号:+,-,*,/来表示#以下全是python2.x写法,3.x以上请在python ...

  2. xsank的快餐 » Python simhash算法解决字符串相似问题

    xsank的快餐 » Python simhash算法解决字符串相似问题 Python simhash算法解决字符串相似问题

  3. python聚类算法实战详细笔记 (python3.6+(win10、Linux))

    python聚类算法实战详细笔记 (python3.6+(win10.Linux)) 一.基本概念:     1.计算TF-DIF TF-IDF是一种统计方法,用以评估一字词对于一个文件集或一个语料库 ...

  4. python排序算法实现(冒泡、选择、插入)

    python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)) ...

  5. Python C3 算法 手动计算顺序

    Python C3 算法 手动计算顺序   手动计算类继承C3算法原则: 以所求类的直接子类的数目分成相应部分 按照从左往右的顺序依次写出继承关系 继承关系第一个第一位,在所有后面关系都是第一个出现的 ...

  6. python聚类算法解决方案(rest接口/mpp数据库/json数据/下载图片及数据)

    1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的K-means聚类算法,算法原理就不介绍了,只从代码层面 ...

  7. python相关性算法解决方案(rest/数据库/json/下载)

    1. 场景描述 一直做java,因项目原因,需要封装一些经典的算法到平台上去,就一边学习python,一边网上寻找经典算法代码,今天介绍下经典的相关性算法,算法原理就不介绍了,只从代码层面进行介绍,包 ...

  8. 关联规则 -- apriori 和 FPgrowth 的基本概念及基于python的算法实现

    apriori 使用Apriori算法进行关联分析 貌似网上给的代码是这个大牛写的 关联规则挖掘及Apriori实现购物推荐  老师 Apriori 的python算法实现 python实现关联规则  ...

  9. Python排序算法之选择排序定义与用法示例

    Python排序算法之选择排序定义与用法示例 这篇文章主要介绍了Python排序算法之选择排序定义与用法,简单描述了选择排序的功能.原理,并结合实例形式分析了Python定义与使用选择排序的相关操作技 ...

随机推荐

  1. Tree2cycle

    Problem Description A tree with N nodes and N-1 edges is given. To connect or disconnect one edge, w ...

  2. 使用python实现最优化问题

    最优化问题 1.无约束的最优化问题 所谓的无约束优化问题指的是一个优化问题的寻优可行集合是目标函数自变量的定义域,即没有外部的限制条件.例如,求解优化问题 [ \begin{array}{rl} \t ...

  3. CHS与LBA之间转换程序

    原理及介绍来自维基百科 http://zh.wikipedia.org/wiki/%E9%82%8F%E8%BC%AF%E5%8D%80%E5%A1%8A%E4%BD%8D%E5%9D%80 个人用的 ...

  4. hdoj 1599 find the mincost route【floyd+最小环】

    find the mincost route Time Limit: 1000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  5. dp poj 1080 Human Gene Functions

    题目链接: http://poj.org/problem?id=1080 题目大意: 给两个由A.C.T.G四个字符组成的字符串,可以在两串中加入-,使得两串长度相等. 每两个字符匹配时都有个值,求怎 ...

  6. 2013腾讯编程马拉松初赛第一场(3月21日) 湫湫系列故事——减肥记II ----线段树

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4509 虽然制定了减肥食谱,但是湫湫显然克制不住吃货的本能,根本没有按照食谱行动! 于是,结果显而易见… 但 ...

  7. 得到创建人Id

    等到创建人id,也就是登录人id arg1 .getCtx().fetchMemberId(); 其中arg1是 LServerEnv 的对象

  8. sonarQube Scanner

    到现在为止,已经将sonarQube服务器搭建好,服务器是Linux服务器,基于sonarQube6.1配置的 原理关于sonarQube的工作原理,暂时还不是太清楚,据同事的分析,是在本机调用服务器 ...

  9. 用Python实现常见排序算法

    最简单的排序有三种:插入排序,选择排序和冒泡排序.这三种排序比较简单,它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了.贴出来源代码. 插入排序: def insertion_sort( ...

  10. SuperSocket使用demo

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using SuperSocket. ...