随笔分类 -  数据结构和算法

摘要:题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 解题思路: 这个题目我们首先拿到的代码如下: # -*- coding:utf-8 -*- class Solution: def push(self, node): #入栈 def p 阅读全文
posted @ 2020-08-12 16:55 Geeksongs 阅读(166) 评论(0) 推荐(0)
摘要:题目描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。 解题思路: 1. 阅读全文
posted @ 2020-08-11 15:09 Geeksongs 阅读(182) 评论(0) 推荐(0)
摘要:一.题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 二.题目解析 如果使用python的内置函数replace,则可以在几秒钟内求解,但我们这里不适用repalce函数,在实际的 阅读全文
posted @ 2020-08-08 12:15 Geeksongs 阅读(135) 评论(0) 推荐(0)
摘要:一.题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 二.题目解析 首先这个题目我们需要弄清楚题目的题意就很简单了,题目的意思不是让我们自己编写一 阅读全文
posted @ 2020-08-08 11:28 Geeksongs 阅读(153) 评论(0) 推荐(0)
摘要:一.题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 二.题目解析 假设我们从最后往前面跳,令最后一次跳的次数为f(n),那么f(n)=f(n-1)+f(n-2)+....+f(1),因为每往回跳一次,则可以往回跳1,2,3,4,. 阅读全文
posted @ 2020-08-08 10:39 Geeksongs 阅读(377) 评论(0) 推荐(0)
摘要:一.题目: 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。 二.题目分析 拿到这个题目我们冥思苦想也没有想到一个好的想法,于是从最简单的找规律开始吧! 另台阶的级数为n,跳法的数量为ret. n=1, ret=1 n=2, re 阅读全文
posted @ 2020-08-05 14:49 Geeksongs 阅读(373) 评论(0) 推荐(0)
摘要:题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1)。 n<=39 这个题目大家在学编程的时候都应该遇到过,但是不能够使用递归解法,因为如果使用递归,就会超出时间,算法的复杂度是2^n。因此这里采用迭代的解法。 代码如下所示: # 阅读全文
posted @ 2020-08-03 21:01 Geeksongs 阅读(239) 评论(0) 推荐(0)
摘要:这个题目的目的主要是让我们熟悉POJ这个平台是怎么使用的,第一个题目1000的解答过程如下: #include <stdio.h> int main() { int a,b; scanf("%d %d",&a, &b); printf("%d\n",a+b); return 0; } 这段C程序既能 阅读全文
posted @ 2020-06-21 14:26 Geeksongs 阅读(315) 评论(0) 推荐(0)
摘要:双端队列和普通队列不同的地方是既可以队首和队尾进行插入,同时也就可以从队首和队尾进行remove删除 ,同时不遵循先进先出或者先进后出的规则,这需要通过具体的算法实现来确定,这个数据结构的实现过程如下: class Deque: def __init__(self): self.items = [] 阅读全文
posted @ 2020-06-19 22:19 Geeksongs 阅读(331) 评论(0) 推荐(0)
摘要:树的结构如下所示: 我们使用深度优先搜索对其进行遍历: class Node: def __init__(self, id, anime): self.id = id self.anime = anime self.left = None # <Left node> self.right = Non 阅读全文
posted @ 2020-05-12 09:17 Geeksongs 阅读(2053) 评论(0) 推荐(0)
摘要:在古罗马时期,犹太人背叛了罗马人,落到困境,约瑟夫和同行的一共39个犹太人只能够自杀殉国,但是犹太教义规定不能自杀,因此只能够让别人将自己杀害。他们所有39个人坐成一圈,报数1—7,报到7则由身旁的人将自己杀死。结果约瑟夫灵机一动,给自己安排了一个位置,最后活了下来,那么约瑟夫给自己安排的是哪一个位 阅读全文
posted @ 2020-05-08 15:39 Geeksongs 阅读(1024) 评论(0) 推荐(0)
摘要:在平时写程序当中,我们会经常遇到程序当中括号的匹配问题,也就是在程序当中左括号的数量和右括号的数量必须相等。如果不相等的话则程序必然会报错。Hint:在读取程序的时候,读取的结果肯定是左边的全是左括号,右边的全是右括号,也就是一定是“(((( )))))”或者“((((((((((((( ))))) 阅读全文
posted @ 2020-05-08 13:34 Geeksongs 阅读(1203) 评论(0) 推荐(0)
摘要:在数据结构当中,有一种结构叫做队列。队列和栈都是一个类似于列表的东西,唯一不同的地方则是“先进先出”。队列就像我们在食堂排队吃饭一样,先排队的同学最先打到饭,下面是我画的队列的图片: 从这种图当中我们可以看到队列就如同一个吸管一样,最先从吸管左边进入的数字1,同时也最先吸管的最右边出来。是否十分容易 阅读全文
posted @ 2020-05-08 10:50 Geeksongs 阅读(1028) 评论(0) 推荐(0)
摘要:栈在程序设计当中是一个十分常见的数据结构,它就相当于一个瓶子,可以往里面装入各种元素,最先装进这个瓶子里的元素,要把后装进这个瓶子里的全部元素拿出来完之后才能够把他给拿出来。假设这个瓶子在桌上平放,左边是瓶底,右边是瓶口,那么我们可以作出下图: 可以看到瓶子里一共被我放进了5个元素,分别是1,2,3 阅读全文
posted @ 2020-05-08 10:15 Geeksongs 阅读(632) 评论(0) 推荐(0)
摘要:程序如下: def selection_sort(alist): n=len(alist) for i in range(n-1):#到n-1停止是因为最后一个肯定是最大的无须比较 min_index=i for k in range(i+1,n):#到n停止是因为到最后一个不一定是最小的,所以需要 阅读全文
posted @ 2020-03-30 15:38 Geeksongs 阅读(318) 评论(0) 推荐(0)
摘要:实现冒泡排序的程序如下: def bubble_sort(alist): n=len(alist) for k in range(n-1):#最后最小的一个数字不用排序,因为已经是最小了 for i in range(n-1-k):#用k来限定每一个小冒泡排序的区间 if(alist[i]>alis 阅读全文
posted @ 2020-03-30 15:35 Geeksongs 阅读(336) 评论(0) 推荐(0)
摘要:在一个列表当中我们可以进行线性查找也可以进行二分查找,即通过不同的方法找到我们想要的数字,线性查找即按照数字从列表里一个一个从左向右查找,找到之后程序停下。而二分查找的效率往往会比线性查找更高。 一.二分查找的步骤 二分查找的步骤首先是将列表进行升序或者降序排列,否则无法进行数字的比较,也就无法进行 阅读全文
posted @ 2020-03-23 07:03 Geeksongs 阅读(2187) 评论(0) 推荐(0)
摘要:一.时间复杂度 首先我们来看一个问题·: 题目:如果a+b+c=1000,且a^2+b^2=c^2(a,b,c为自然数),如何求出a,b,c所有可能的组合? 看到这个题目我们的第一反应则是直接套用三个循环使用枚举法直接得到答案,程序如下: import time start_time = time. 阅读全文
posted @ 2020-03-15 09:58 Geeksongs 阅读(824) 评论(0) 推荐(0)
摘要:我们要想去度量一个算法的性能,有多种方法,比如度量算法的运行时间,统计指令,度量算法所使用的内存等方法,下面我们一个一个的来解读一下 1.度量算法的运行时间 度量算法的运行时间的一种方法是,利用计算机自带的一个计时器,来获取一个循环所执行的运行时间,我们通过连续几个循环的执行时间从而找出每一个循环之 阅读全文
posted @ 2019-07-31 19:54 Geeksongs 阅读(1950) 评论(0) 推荐(0)
摘要:1.线性表的定义 如果我们把线性表简化成一个逻辑结构图,则可以下面这张图来表示: 线性表的特点如下: 2.线性表当中的顺序储存的定义: 采用顺序储存结构的线性表我们通常称为顺序表。 线性表当中的元素我们表示为ai,i是我们的逻辑地址,则顺序表当中的元素地址计算公式为: 下面是顺序表储存结构示意图: 阅读全文
posted @ 2019-07-25 10:48 Geeksongs 阅读(1636) 评论(0) 推荐(0)

Coded by Geeksongs on Linux

All rights reserved, no one is allowed to pirate or use the document for other purposes.