python数据结构与算法
weixin_44953902
这个作者很懒,什么都没留下…
展开
-
赛码习题:马路上的路灯
题目描述城市E的马路上有很多路灯,每两个相邻路灯之间的间隔都是1公里。小赛是城市E的领导,为了使E城市更快更好的发展,需要在城市E的一段长度为M的主干道上的一些区域建地铁。这些区域要是建了地铁,就需要挪走相应的路灯。可以把长度为M的主干道看成一个数轴,一端在数轴0的位置,另一端在M的位置;数轴上的每个整数点都有一个路灯。要建地铁的这些区域可以用它们在数轴上的起始点和终止点表示,已知任一区域的起始...原创 2019-09-01 22:33:43 · 253 阅读 · 0 评论 -
赛码习题:击鼓传花
题目描述 Socket,学校联欢晚会的时候,为了使每一个同学都能参与进来,主持人常常会带着同学们玩击鼓传花的游戏。游戏规则是这样的:n个同学坐着围成一个圆圈,指定一个同学手里拿着一束花,主持人在旁边背对着大家开始击鼓,鼓声开始之后拿着花的同学开始传花,每个同学都可以把花传给自己左右的两个同学中的一个(左右任意),当主持人停止击...原创 2019-08-27 13:29:31 · 437 阅读 · 0 评论 -
赛码习题:上台阶
题目描述有一楼梯共m级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第m级,共有多少走法?注:规定从一级到一级有0种走法。代码如下n = input()list2 = []def top_b(x): list1 = [0,1,1] if x < 3: return x-1 else: for j in range(3...原创 2019-08-27 10:52:07 · 318 阅读 · 0 评论 -
赛码习题:格子游戏
题目描述有n个格子,从左到右放成一排,编号为1-n。共有m次操作,有3种操作类型:修改一个格子的权值;求连续一段格子权值和;求连续一段格子的最大值。对于每个2、3操作输出你所求出的结果。代码如下:n,m = map(int, input().split())list1,list2 = [],[]for i in range(n): list1.append(int(...原创 2019-08-26 12:36:00 · 372 阅读 · 0 评论 -
赛码习题:约德尔测试
题目描述兰博和提莫闲聊之后,回归到了他们的正题,约德尔人的未来。说起约德尔人的未来,黑默丁格曾经提出了一个约德尔测试,将约德尔人的历史的每个阶段都用一个字符表达出来。(包括可写字符,不包括空格。)。然后将这个字符串转化为一个01串。转化规则是如果这个字符如果是字母或者数字,这个字符变为1,其它变为0。然后将这个01串和黑默丁格观测星空得到的01串做比较,得到一个相似率。相似率越高,则约德尔的未来...原创 2019-08-26 11:34:47 · 183 阅读 · 0 评论 -
Python数据结构与算法之归并排序
归并排序 归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。 将数组分解最小后,然后合并连哥哥有序数组,基本思想是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后...原创 2019-07-27 11:09:12 · 139 阅读 · 0 评论 -
Python数据结构与算法之顺序表的操作和python中的顺序表
顺序表的操作增加元素如图所示:为顺序表增加新元素111的三种方式:a:尾端加入元素,时间复杂度为O(1)b:非保存的加入元素(不常见),时间复杂度为O(1)c:保存的元素加入,时间复杂度为O(n)删除元素a:删除表尾元素,时间复杂度为O(1)b:非保序的元素删除(不常见),时间复杂度为O(1)c:保序的元素删除,时间复杂度为O(n)Python中的顺序表 &nb...原创 2019-07-23 12:00:17 · 241 阅读 · 0 评论 -
python数据结构与算法之顺序表
顺序表 在程序中,经常需要将一组(通常是为某个类型的)数据元素作为整体管理和使用,需要创建这种元素,用变量记录它们,传进传出函数等。一组数据中包含的元素个数可能发生变化(可以增加或删除元素)。 对于这种需求,最简单的解决方案便是将这样一组元素看成一个序列,...原创 2019-07-23 09:58:10 · 137 阅读 · 0 评论 -
Python数据结构与算法之二分查找
二分法查找 二分查找又称折半查找,有带你是比较次数少,查找速度快,平均性能好;其缺点是要求待查表位有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中...原创 2019-07-26 21:20:33 · 100 阅读 · 0 评论 -
赛码习题:军训队列
题目描述 某大学开学进行军训队列训练,将学生从一开始按顺序依次编号,并排成一行横队,训练的规则如下:从头开始一至二报数,凡报到二的出列剩下的依次向前靠拢,再从头开始进行一至三报数,凡报到三的出列,剩下的依次向前靠拢,继续从头开始进行一至二报数。。。以后每次从头开始轮流进行一至二报数、一至三报数直到剩下的人数不超过三人为止。...原创 2019-08-27 15:20:36 · 406 阅读 · 0 评论 -
赛码习题:字符判断
题目描述 判断字符串b的所有字符是否都在字符串a中出现过,a、b都是可能包含汉字的字符串。b中重复出现的汉字,那么a中也要至少重复相同的次数。汉字使用gbk编码(简单的说,用两个字节表示一个汉字,高字节最高位为1的代表汉字,低字节最高位可以不为1)。 in...原创 2019-08-27 22:40:39 · 170 阅读 · 0 评论 -
赛码习题:博弈问题
题目描述小赛是一名聪明的程序员。他的聪明确保他一定会应聘成功_~在应聘会上,人事主管向小赛提出了这样一个问题——这次招聘的规则是这样的。一共有n个人(n>1)参加应聘。人事主管事先选好了一个正整数x,他会把自己选的这个数x告诉前来应聘的每一个人。每个人(包括小赛)都可以选择1~m中的任意一个实数(就不要问实数是怎么选的啦2333)。参加应聘的人都不会知道其他人选择了什么。最后...原创 2019-08-28 11:29:26 · 297 阅读 · 0 评论 -
赛码习题:小球的距离
题目描述小赛和三个小朋友一起玩小球,他们是一种新玩法。他们站在楼房的不同层,假设小赛站的楼层距离地面N米,球从小赛手里自由落下,每次落地后反跳回原高度的一半;再落下,再反跳回原高度的一半。小赛和三个小朋友站在不同的楼层,同时放下手中的小球,当小球全部落到地面不跳时,求4个小球一共经过了多少米?(数字都为整数)代码如下list_bd = list(map(int,input().split(...原创 2019-08-29 22:13:58 · 169 阅读 · 0 评论 -
赛码习题:最大间隔
题目描述给定一个递增序列,a1<a2<…<an。定义这个序列的“最大间隔”为现在要从a2,a3…an-1中删除一个元素,问剩余序列的“最大间隔”最小是多少?代码如下n = int(input())list_a = list(map(int,input().split()))max_gap = []def gap(list_b): i,a = 0,0 while i...原创 2019-08-29 21:14:08 · 169 阅读 · 0 评论 -
赛码习题:刮刮卡兑换
题目描述 英氏公司的婴儿米粉每盒里都有一张刮刮卡,最近正在举办一次促销优惠活动。凭3个刮刮卡可以兑换一盒同等价位的米粉,并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下,如果不浪费刮刮卡,尽量地参加活动,那么,对于初始买入的n盒米粉,最后一共能拿到多少盒米粉。代码如下方法一n = int(input())co...原创 2019-08-29 20:30:39 · 258 阅读 · 0 评论 -
赛码习题:公交车乘客
题目描述一个公交车经过n个站点,乘客从前门上车,从后门下车。现在统计了在第i个站,下车人数a[i],以及上车人数b[i]。问公交车运行时候车上最多有多少乘客?代码如下n = int(input())list_up,list_down = [],[]k,m = 0,0for i in range(n): down,up = map(int,input().split())...原创 2019-08-29 19:57:20 · 506 阅读 · 0 评论 -
赛码习题:翻转数组
题目描述 给定一个长度为n的整数数组a,元素均不相同,问数组是否存在这样一个片段,只将该片段翻转就可以使整个数组升序排列。其中数组片段[l,r]表示序列a[l], a[l+1], …, a[r]。 原始数组为a[1], a[2], …, a[l-2], a...原创 2019-08-29 18:03:37 · 271 阅读 · 0 评论 -
赛码习题:路灯
题目描述 V先生有一天工作到很晚,回家的时候要穿过一条长l的笔直的街道,这条街道上有n个路灯。假设这条街起点为0,终点为l,第i个路灯坐标为ai。路灯发光能力以正数d来衡量,其中d表示路灯能够照亮的街道上的点与路灯的最远距离,所有路灯发光能力相同。为了让V先生看清回家的路,路灯必须照亮整条街道,又为了节省电力希望找到最小的d是...原创 2019-08-29 17:58:40 · 413 阅读 · 0 评论 -
赛码习题:小赛旅游
题目描述 小赛很想到外面的世界看看,于是收拾行装准备旅行。背了一个大竹筐,竹筐里装满了路上吃的,这些吃的够它走N公里。为了规划路线,它查看了地图,沿途中有若干个村庄,在这些村庄它都可以补充食物。但每次补充食物都需要花费时间,在它竹筐的食物足够可以走到下一个村庄的时候它就不用补充,这样背起来不累而且不花费时间。地图上可以看到村庄...原创 2019-08-28 14:21:45 · 162 阅读 · 0 评论 -
赛码习题:黑默丁格的炮台
题目描述 兰博教训了提莫之后,然后和提莫讨论起约德尔人,谈起约德尔人,自然少不了一个人,那就是黑默丁格——约德尔人历史上最伟大的科学家。 提莫说,黑默丁格最近在思考一个问题:黑默丁格有三个炮台,炮台能攻击到距离它R的敌人,(两点之间的距离为两点连线的距离,...原创 2019-08-28 12:36:33 · 214 阅读 · 0 评论 -
Python数据结构与算法之二叉树的遍历
二叉树的遍历树的遍是树的一种重要的运算。所谓遍历是指对树中所有节点的信息访问,即一次对树中每个节点当问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(travelsal)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用赌鬼,广度优先一般用队列。一般情况下能用递归实现的算法大部分也能用堆栈来实现。深度优先遍历对于一棵二叉树,深度优先搜索(Depth First S...原创 2019-07-26 20:18:21 · 235 阅读 · 0 评论 -
Python数据结构与算法之二叉树
二叉树二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)性质1:在二叉树的第i层上至多有2(i−1)2^(i-1)2(i−1)个结点(i>0)性质2:深度为k的二叉树至多有2k−12^k-12...原创 2019-07-26 19:16:26 · 172 阅读 · 0 评论 -
Python数据结构与算法之栈
栈(stack) 栈(stack),有些地方称为堆栈,是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一段(称为栈顶指标,英语:top)进行加入数据(英语:push)和输出数据(英语:pop)的运算。没有位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定一种默认的访问顺序。...原创 2019-07-24 17:11:15 · 627 阅读 · 0 评论 -
Python数据结构与算法之单项循环链表
单项循环链表单链表的变形是单项循环链表,链表中的最后一个节点的next域不再为None,而是指向链表的头节点。操作is_empty():判断链表是否为空length():返回链表的长度travel():遍历add(item):在头部添加一个节点append(item):在尾部添加一个节点insert(pos,item):在指定位置pos添加节点remove(item):删除一...原创 2019-07-24 15:55:15 · 137 阅读 · 0 评论 -
Python数据结构与算法之链表与顺序表的对比
链表与顺序表的对比 链表失去了顺序表随机读取的优点,同时链表由于增加了节点的指针域,空间开销比较大,但对存储空间的使用要相对灵活。 链表与顺序表的各种操作复杂度如图所示:操作链表顺序表访问元素O(n)O(1)在头部插入/删...原创 2019-07-23 22:30:29 · 159 阅读 · 0 评论 -
Python数据结构与算法之单向链表的操作
节点的实现class Node(object): """单链表的结点""" def __init__(self,elem): # _item存放数据元素 self.elem = elem # _next是下一个节点的标识 self.next = None单链表的操作is_empty()链表是否为空lengt...原创 2019-07-23 22:16:59 · 196 阅读 · 0 评论 -
Python数据结构之链表的定义
链表为什么需要链表顺序表的构建需要预先知道数据大小来申请连续的内存空间,而在进行扩充时又需要进行数据的搬迁,所以使用起来并不是很灵活。链表结构可以充分利用计算机内存空间,灵活的内存动态管理。链表的定义链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是不像顺序表一样连续存储数据,二十在每一个节点(数据存储单元)里存放下一个节点的位置信息(即地址)。单向链表单向...原创 2019-07-23 21:39:04 · 302 阅读 · 0 评论 -
数据结构与算法入门之线性表(1)
线性表(Linear list) 线性表是n个类型相同数据元素的有限序列,通常记作(a0、a1、…、ai-1、ai、ai+1…an-1)1. 相同数据类型 在线性表的定义中,a0到an-1的n个数据元素是具有相同属性的元素。 &n...原创 2019-07-14 19:42:56 · 179 阅读 · 0 评论 -
数据结构与算法入门之算法空间复杂度
空间复杂度算法的存储量包括:程序本身所占空间;输入数据所占空间;辅助变量所占空间。 输入数据所占空间只取决于问题本身,和算法无关,则只需要分析除输入和程序之外的辅助变量所占额外空间。 空间复杂度是对一个算法在运行过程中临时所占的存储空间大小的度...原创 2019-07-14 13:32:32 · 202 阅读 · 0 评论 -
数据结构与算法入门之算法的时间复杂度
算法(algorithm) 算法是指令的集合,是为解决特定问题而规定的一系列操作。 它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出。 一个算法通常由五个特...原创 2019-07-14 12:58:48 · 378 阅读 · 0 评论 -
Python数据结构与算法之队列
队列(queue) 队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。 队列是一些红先进先出(First In First Out)的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为对头。队列不允许在中间部位进行操作...原创 2019-07-24 19:34:42 · 140 阅读 · 0 评论 -
Python数据结构与算法之双向链表的操作
双向链表的操作is_empty():链表是否为空length():链表的长度travel():遍历链表add(item):链表头部添加append(item):链表尾部添加insert(pos,item):指定位置添加remove(item):删除节点search(item):查找结点是否存在实现节点的实现class Node(object): def __ini...原创 2019-07-24 22:08:50 · 111 阅读 · 0 评论 -
Python数据结构与算法之排序与搜索
排序与搜索 排序算法(Sorting algo)是一种能将一串数据依照特定顺序进行排序的一种算法。排序算法的稳定性 稳定性:稳定排序算法会让原本相等键值的记录维持相对次序。也就是如果一个排序算法是稳定的,当有两个相等键值的记录R和S,且在原本的列表中R出...原创 2019-07-24 22:59:41 · 96 阅读 · 0 评论 -
数据结构与算法之算法的定义
算法(algorithm) 算法是指令的集合,是为解决特定问题而规定的一系列操作。 它是明确定义的可计算过程,以一个数据集合作为输入,并产生一个数据集合作为输出。 &nbs...原创 2019-07-22 21:27:15 · 561 阅读 · 0 评论 -
数据结构与算法之python内置类型性能分析
python内置类型性能分析timeit模块timeit模块可以用来测试一小段Python代码的执行速度。class timeit.Timer(stmt='pass',setup='pass',timer=<timer function>) Timer是测量小段代码执行速度的类; &...原创 2019-07-22 19:29:11 · 183 阅读 · 0 评论 -
Python数据结构与算法之树与树算法
树的概念 树(tree)是一种抽象数据类型(ADT)或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是跟朝上,而叶超下的。它具有以下有特点:每个节点由零个或多个子节点没有父节点的节...原创 2019-07-25 23:47:30 · 205 阅读 · 0 评论 -
Python数据结构与算法之希尔排序
,## 希尔排序(shell sort)希尔排序(shell sort)是插入排序的一种。也是缩小增量排序,是直接插入插叙算法的一种高效的改进版本。希尔排序是非稳定排序算法。希尔排序是把记录按鞋标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至时,整个文件恰被分成一组,算法便终止。希尔排序过程希尔排序的基本思想是:将数组在一个表中并对列分...原创 2019-07-25 20:21:13 · 197 阅读 · 0 评论 -
Python数据结构与算法之插入算法
插入排序 插入排序(Insertion sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,位最新元素提供插入空间。插入排序分析实现方式一:def insert_s...原创 2019-07-25 18:42:15 · 285 阅读 · 0 评论 -
Python数据结构与算法之选择排序
选择排序 选择排序(Selection sort)是一种简单的排序算法。它的工作原理如下:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 ...原创 2019-07-25 17:05:54 · 101 阅读 · 0 评论 -
Python数据结构与算法之冒泡排序
冒泡排序(Bubble Sort)冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说改数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们...原创 2019-07-25 09:59:12 · 163 阅读 · 0 评论