基本数据结构与算法
文章平均质量分 62
令狐公子
开朗活泼自信进取
展开
-
正则表达式——Python版
正则表达式是python程序猿经常考察的一个地方,其应用也比较广泛,主要功能是定义格式去匹配查找给定的字符串内容,找出符合我们要求的字符串内容;re模块就是正则模块,其提供了所有的正则表达式功能;正则里面的特殊字符类:原创 2016-10-10 12:58:29 · 603 阅读 · 0 评论 -
前序、中序、后序二叉树遍历
class Node(object): """ 二叉树里的节点类 """ def __init__(self, elem=-1, lchild=None, rchild=None):树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如哈弗曼树。树的遍历主要有两种,一种是深度优先遍历,像前序、中序、后序;另一种是广度优先遍历,像层次遍历原创 2016-12-09 15:17:23 · 797 阅读 · 0 评论 -
Python实现快速排序
快速排序的原理:在已知的数列中选择一个数字作为基准,与剩余的数作比较,将比这个基准小的数放在左边,比其大的数放在右边;然后将基准左右两边的数列重复以上步骤,直到基准两边只有一个数字为止; 特点:不稳定,时间复杂度最理想 O(nlogn) 最差时间O(n^2) 算法原理比较简单,易于理解,其实现方法也较为多种,这里我们使用递归调用的思想采用Python实现代码;原创 2016-11-25 15:57:31 · 3788 阅读 · 0 评论 -
算法复杂度的计算
算法复杂度是程序猿面试中考察几率比较大的一个问题,尤其在一些互联网公司的线上笔试中,经常可以看到这种问题,时间复杂度、空间复杂度等等,而且其本身又是考察算法优劣的一个重要参考,所以在此解析说明一下,希望遇到类似问题可以不再捉急O(∩_∩)O~ 首先我们应该找到程序中最基本的操作,然后考量基本运算操作的重复执行次数;如果基本运算操作重复执行的次数大,则说明算法的复杂度比较高;首先我们需要明原创 2016-11-24 15:06:24 · 3843 阅读 · 0 评论 -
给定一个整数,如何取其各个位的数
面试中遇到的一个小问题,程序需要我们将一个给出的整数将其各个位上的整数拿出来,当时没有写出来,很遗憾,现在看来这是如此的简单,方法如下import numpy def ii(a): l=[] while a>=0: l.append(a%10) a/=10 if a==0: break原创 2016-12-02 16:02:07 · 5749 阅读 · 0 评论 -
常见面试概率问题
有一苹果,两个人抛硬币来决定谁吃这个苹果,先抛到正面者吃。问先抛这吃到苹果的概率是多少给所有的抛硬币操作从1开始编号,显然先手者只可能在奇数(1,3,5,7…)次抛硬币得到苹果,而后手只可能在偶数次(2,4,6,8…)抛硬币得到苹果。设先手者得到苹果的概一条长度为l的线段,随机在其上选2个点,将线段分为3段,问这3个子段能组成一个三角形的概率是多少?一副扑克牌54张,现分成3等份每份18张,问大小王出现在同一份中的概率是多少?原创 2016-11-30 16:47:45 · 7138 阅读 · 0 评论 -
堆排序详解-Python
堆排序是非常常见考察的一个排序方法,相比于冒泡、选择排序的算法复杂度,堆排序的算法复杂度较低为O(n*log2n); 首先堆是一种数据结构,是一棵完全二叉树且满足性质:所有非叶子结点的值均不大于或均不小于其左、右孩子结点的值,如下是一个堆的示例:这是一个大堆原创 2016-11-30 14:48:40 · 842 阅读 · 0 评论 -
字符串组中统计出现次数最大的-python
一个字符串组成的大数组,统计里面出现次数最大的字符串,并输出,两种方式:m=numpy.argmax(Counter(words).values()) # 注意字典的使用,如何输出所有的键,如何输出所有的键值 如何返回最大的那个的下角标mOut[31]: 1print Counter(words).keys()[m]原创 2016-11-02 15:25:18 · 5621 阅读 · 0 评论 -
冒泡排序算法-Python描述
冒泡排序的思想:假如数列有n个数,我们从第n个数开始,比较第n个数与第n-1个数的大小,如果第n个小于第n-1个,则交换两者的位置,否则不动;依次进行下去直到数组当中的第一个元素,此时第一个元素就是整个数组当中最小的数值;然后再一次比较数组第n个与第n-1个数组的大小,后面的小于前面的则交换两者的位置,直到整个数组的第2个数为止(因为第一个元素是全数组当中最小的一个,所以不必继续跟它比较了),这样大循环 n-2 次,里面的小循环循环的次数为 直到之前被排出来的那个相对最小值;原创 2016-11-01 17:53:59 · 4214 阅读 · 0 评论 -
如何判断素数 如何输出范围中的素数
因为如果一个数不是素数是合数,那么一定可以由两个自然数相乘得到,其中一个大于或等于它的平方根,一个小于或等于它的平方根。并且成对出现。原创 2016-11-01 17:50:22 · 1101 阅读 · 0 评论 -
python求解斐波那契数列
斐波那契数列指的是这样的一组数列: 0 1 1 2 3 5 8............ 后一个元素是前两个元素的和,现在我们要输出斐波那契数列当中的第n个,这里给出两种方法,其中第一个方法效率较低,在数列很大的时候速度不如第二个速度快,代码如下:原创 2016-11-01 17:09:59 · 1793 阅读 · 0 评论 -
Python面向对象编程
本来想顺便讲一讲面向编程的思想,但是随便一搜发现资料好多,而且内容都是洋洋洒洒几百上千字,所以本文就不在啰嗦了,有兴趣的童鞋自行百度撒~; 面向对象三个特征:封装,继承,多态。 封装:就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏; 继承:可以使用现有类的所有功能,并在无需重新编译原来类的情况下对这些功能进行扩展;原创 2016-10-08 17:42:06 · 600 阅读 · 0 评论 -
单链表-Python操作
链表是数据结构中最基本常用的,C++语言中单链表是利用指针操作实现的,python作为面向对象编程的,可以使用创建一个Node类来实现链表,利用类的属性引用来代替指针操作。 下面我们创建了一个节点类,然后编写了几个链表操作,包括创建,插入,删除,输出等:class Node(): # 初始化 构造函数 def __init__(self,value,next=None): self.value=value原创 2016-11-04 10:31:39 · 17563 阅读 · 0 评论 -
二分查找
def binary_search(list,item): low = 0 high = len(list)-1 while low<=high: mid = (low+high)/2 guess = list[mid] if guess>item: high = mid-1 ...原创 2018-08-24 16:04:48 · 810 阅读 · 0 评论