算法
文章平均质量分 52
Leosaf
大家好,我是天津科技大学人工智能专业的在校大学生,专注于人工智能的各个方面,目前就读本科,自己借用CSDN来记录自己的学习过程,欢迎大家一起分享学习经验
展开
-
蓝桥杯-分考场-python
题目如下n 个人参加某项特殊考试。为了公平,要求任何两个认识的人不能分在同一个考场。求是少需要分几个考场才能满足条件。输入描述输入格式:第一行,一个整数 n (1≤n≤100),表示参加考试的人数。第二行,一个整数 m,表示接下来有 m 行数据。以下 mm 行每行的格式为:两个整数 a,ba,b,用空格分开1≤a,b≤n )表示第 a 个人与第 b个人认识。输出描述输出一行一个整数,表示最少分几个考场。输入输出样例示例输入581 21 31 42 32 42 53原创 2021-06-03 20:15:56 · 926 阅读 · 2 评论 -
蓝桥杯对局匹配——python
题目如下小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是 K 的两名用户匹配在一起。如果两人分差小于或大于 K,系统都不会将他们匹配。现在小明知道这个网站总共有 N 名用户,以及他们的积分分别是 A1, A2, AN小明想了解最多可能有多少名用户同时在线寻找对手,但是系统却一场对局都匹配不起来(任意两名用户积分差不等于 K)?输入描述第一行包含两个个整数 N,K。第二行包含 NN个整数 A1原创 2021-06-03 16:27:22 · 310 阅读 · 1 评论 -
蓝桥杯——发现环(python)
题目如下小明的实验室有 N 台电脑,编号1⋯N。原本这 N 台电脑之间有 N−1 条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了 BUG。为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他吗?输入描述输入范围:第一行包含一个整数 N。以下 N 行每行两个整数 a,b,表示 a原创 2021-06-01 21:44:50 · 307 阅读 · 1 评论 -
蓝桥杯机器人塔——python
题目如下:X 星球的机器人表演拉拉队有两种服装,A 和 B。他们这次表演的是搭机器人塔。类似:AB BA B AA A B BB B B A BA B A B B A队内的组塔规则是:A 只能站在 AA 或 BB 的肩上。B 只能站在 AB 或 BA 的肩上。你的任务是帮助拉拉队计算一下,在给定 A 与 B 的人数时,可以组成多少种花样的塔。输入描述输入一行两个整数 M,NM,N(0<M,N<5000<M,N<500),分别表示 A、B 的人数,保证人数原创 2021-05-25 22:22:20 · 764 阅读 · 7 评论 -
蓝桥杯-凑平方数(python)
题目如下本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。把 00 ~ 99 这 1010 个数字,分成多个组,每个组恰好是一个平方数,这是能够办到的。比如:0, 36, 5948721再比如:10985247361, 25, 63907840, 4, 289, 15376…注意,00 可以作为独立的数字,但不能作为多位数字的开始。 分组时,必须用完所有的数字,不能重复,不能遗漏。如果不计较小组内数据的先后顺序,请问有多少种不同的分组方案?题目解析官方解法我太原创 2021-05-25 17:05:14 · 345 阅读 · 0 评论 -
蓝桥杯——一步之遥
题目描述本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。从昏迷中醒来,小明发现自己被关在 X 星球的废矿车里。 矿车停在平直的废弃的轨道上。 他的面前是两个按钮,分别写着 “F”“F” 和 “B”“B” 。小明突然记起来,这两个按钮可以控制矿车在轨道上前进和后退。 按 FF,会前进 9797 米。按 BB 会后退127127 米。 透过昏暗的灯光,小明看到自己前方 11 米远正好有个监控探头。 他必须设法使得矿车正好停在摄像头的下方,才有机会争取同伴的援助。 或许,通过多次操作原创 2021-05-25 15:53:13 · 324 阅读 · 0 评论 -
蓝桥杯——调手表(python解答)
题目如下标题:调手表小明买了块高端大气上档次的电子手表,他正准备调时间呢。在 M78 星云,时间的计量单位和地球上不同,M78 星云的一个小时有 n 分钟。大家都知道,手表只有一个按钮可以把当前的数加一。在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2 。如果当前的数是 n - 1,按一次后会变成 0 。作为强迫症患者,小明一定要把手表的时间调对。如果手表上的时间比当前时间多1,则要按 n - 1 次加一按钮才能调回正确时间。小明想,如果手表可以再添加一个原创 2021-05-14 22:22:36 · 422 阅读 · 0 评论 -
蓝桥杯字母阵列——python解答
题目如下仔细寻找,会发现:在下面的8x8的方阵中,隐藏着字母序列:“LANQIAO”。SLANQIAOZOEXCCGBMOAYWKHIBCCIPLJQSLANQIAORSFWFNYAXIFZVWALCOAIQNAL我们约定: 序列可以水平,垂直,或者是斜向;并且走向不限(实际上就是有一共8种方向)。上图中一共有4个满足要求的串。下面有一个更大的(100x100)的字母方阵。你能算出其中隐藏了多少个“LANQIAO”吗?FOAIQNALWIKEGNICJWAOSXDHTHZPOL原创 2021-03-22 20:00:28 · 1065 阅读 · 0 评论 -
PAT 甲级 1034 Head of a Gang (并查集)——python
我们可以尝试用并查集解决,并且再用一个字典来保存权重和并查集介绍我们这里只是用到部分并查集的知识,def findroot(a): while father[a]!=a: a = father[a] return a#并查集-合并集合+保证根结点最小def union_ab(a,b): fa = findroot(a) fb = findroot(b) if(fa <= fb): father[fb] = fa原创 2021-02-14 17:18:30 · 165 阅读 · 1 评论 -
蓝桥杯真题——振兴中华python解法
题目如下:小明参加了学校的趣味运动会,其中的一个项目是:跳格子。地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg)从我做起振我做起振兴做起振兴中起振兴中华比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。要求跳过的路线刚好构成“从我做起振兴中华”这句话。请你帮助小明算一算他一共有多少种可能的跳跃路线呢?我们观察以下,从最下角的华开始,两方正好都可以走,一直这样下去我们全都可原创 2021-01-14 22:15:05 · 306 阅读 · 0 评论 -
蓝桥杯真题——第三十九级阶梯python讲解
题目如下:小明刚刚看完电影《第39级台阶》,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级!站在台阶前,他突然又想着一个问题:如果我每一步只能迈上1个或2个台阶。先迈左脚,然后左右交替,最后一步是迈右脚,也就是说一共要走偶数步。那么,上完39级台阶,有多少种不同的上法呢?请你利用计算机的优势,帮助小明寻找答案。我们看到台阶问题都会想到用递归来解决,但是我们同时要计算步数,所以此时需要两个参数,一个台阶数,一个步数,这时候我们会在最后进行判断,是否步数为偶数count = 0de原创 2021-01-14 21:40:13 · 924 阅读 · 0 评论 -
力扣547省份的数量——并查集解决
这道题我们需要用并查集进行解决,但是什么是并查集?正如他的名字一样并查集是一种数据结构。他有什么好处呐?这里他的合并,查找的时间复杂度都是只有O(1), 速度特别快,所以有时候还是需要使用并查集并查集这三个字,一个字代表一个意思。并(Union),代表合并查(Find),代表查找集(Set),代表这是一个以字典为基础的数据结构,它的基本功能是合并集合中的元素,查找集合中的元素。并查集跟树有些类似,只不过她跟树是相反的。在树这个数据结构里面,每个节点会记录它的子节点。在并查集里,每个节点会记录它的父原创 2021-01-07 22:11:35 · 241 阅读 · 0 评论 -
python算法之动态规划讲解
初识动态规划在将动态规划之前,我们来继续深入了解以下递归,这样有利于我们对动态规划的了解,我们还是以斐波那契数列为例,这里我们已经写下了如下的代码:def x(n): if n == 0: return 0 elif n == 1: return 1 else: return x(n-1) + x(n-2)但是我们会发现每个问题被我们分解成为了两个问题,但是我们想一想?这时候时间复杂度不就变成了2**n,这会导致计算十分费时间,我们原创 2021-01-07 17:18:20 · 1920 阅读 · 0 评论 -
python数据结构——集合的简单讲解与应用
什么是集合集合是python的数据结构的一种,也是我们比较常见的数据结构,从小学就应该接触过集合,集合是无序的,他没有排列顺序,同时也不会存在相同的数字,就像下面的代码x = set('123132313')print(x){'3', '1', '2'}集合中的相同元素会进行自动的合并。怎么创建集合就像我上面的一样,set()函数可以帮助我们把其他的数据结构转化为集合,同样我们可以直接用大括号进行创建x = {1, 2, 3, 3, 2, 1}print(x){1, 2, 3}但是原创 2021-01-07 16:27:49 · 191 阅读 · 0 评论 -
python-算法之递归
何谓递归?递归时解决问题的一种方法,他将问题不断分成更小的子问题,直到子问题可以用普通的方法解决,通常情况下,递归会使用一个不停调用自己的函数,尽管表面上很普通,但是递归可以帮助我们写出非常优雅的解决方案。如何实现递归?我们尝试自己解决以下一列数之和,我们平常情况下应该会利用循环进行解决,就像这样:def listsum(numList): theSum = 0 for i in numList: theSum += i return theSum原创 2021-01-06 18:53:16 · 391 阅读 · 0 评论 -
力扣.509.斐波那契数列python3,多种解法,比较复杂度
首先我们计算斐波那契数列时最常用的方法就是递归,但是我们常常的递归往往是这样的def x(n): if n == 0: return 0 elif n == 1: return 1 else: return x(n-1) + x(n-2)但是这种的时间复杂度我们计算一下,每个问题都被分成了两个,时间复杂度高达2**n,当我们输入50的时候会计算很长的时间,这时候我们可以尝试用字典来储存,memo = {}def fib1(n):原创 2021-01-04 20:17:02 · 248 阅读 · 0 评论 -
力扣239.滑动窗口的最大值,为什么非要双端队列
我们常常会用循环的方法来解决这个问题,但是不幸的是这样做却往往会超时,因为这样的时间复杂度太高了,代码如下: n = len(nums) if n == 0: return [] ans = [] temp = max(nums[:k]) for i in range(n-k): ans.append(temp) if nums[i+k] > temp原创 2021-01-02 19:22:32 · 98 阅读 · 0 评论 -
力扣605.种花问题贪心python解答
首先设计循环,循环肯定不会缺少判断,我们假设第i个和i+1个都是0,那么我们需要判断i是否为0,如果不是,我们会看第i-1个的值。代码如下 for x in range(len(flowerbed)-1): if flowerbed[x] == flowerbed[x+1] == 0: if (flowerbed[x-1] == 0 and x > 0) or x == 0: n -= 1原创 2021-01-02 17:35:22 · 238 阅读 · 0 评论 -
python数据结构——链表(无序列表)与简单应用
简单介绍链表是一种无序列表,无序列表只需要维持元素之间的相对位置,但是并不需要在连续的内存空间中维护这些位置信息。链表里的元素连接时靠每一个元素都维护一份信息,该信息就是下一个元素的位置,那么这些元素的相对位置就能通过指向下一个元素的链接来表示。但是我们必须要指明链表中的第一个元素的位置,一旦知道之后,就可以访问下一个元素,指向链表的第一个元素的引用叫做头(head)Node类节点(node)时构建链表的基本数据结构,每一个节点对象都有两份信息,数据变量,即该节点的元素,和指向下一个节点的引用。原创 2021-01-02 14:46:28 · 662 阅读 · 0 评论 -
python数据结构————双端队列的介绍与应用
何谓双端队列双端队列是与队列相似的有序集合,他有一前一后两端,操作方面是队列与栈的结合,添加与移除均可在两端进行。双端队列的python实现我们需要设定一个对象来实现双端队列,双端队列的操作有以下几个:Deque()创建一个空双端队列addFront(item)将一个元素加入到前端addRear(item)将一个元素加入到后端removeFront()将前端的第一个元素删去,并且返回它的值removeRear()将后端的第一个元素删去,并返回他的值isEmpty()判断是否为空size(原创 2021-01-02 11:27:46 · 173 阅读 · 0 评论 -
python数据类型——队列的讲解
目录什么是队列队列抽象数据类型队列的简单应用队列应用实战什么是队列队列是有序集合,添加操作发生在尾部,移除操作发生在头部,和栈几乎相反,最新添加的元素必须在队列的尾部等待,就像排队买东西一样,计算机执行任务也是相同的原理队列抽象数据类型队列支持以下操作操作方法Queue()创建一个空队列enqueue(item)在队列的尾部添加一个元素dequeue()从队列的头部移除一个元素.并返回值isEmpty()检查队列是否为空size()返回队列中的元素数目但是需要我们自己用python创建原创 2020-12-31 13:08:14 · 899 阅读 · 0 评论 -
python数据结构——栈讲解
目录什么是栈栈的基本操作类型栈的基本应用匹配符号实现十进制在不同进制下的转换应用实战什么是栈栈有时也称作下堆栈,是一个有序集合,以列表的形式,但是他的添加和移除操作总是发生在同一端,被称为顶端,也叫做栈顶,另一端被称为低端,也叫栈底。可以理解为在桌子上叠放书本,我们放上去之后如果拿的话也是从上往下拿,放的话则是从下往上,我们往往取的都是放的时间最晚的,就是这个原理。栈的基本操作类型栈的操作类型有创建,添加,取出,删除等操作,但是本身并没有栈,我们只是构建的一种,所以我们需要自己写一个栈的代码'''原创 2020-12-29 22:58:49 · 979 阅读 · 2 评论 -
力扣188题买卖股票的最佳时机
这道题的解法最佳还是动态规划。题解如下:动态规划题的主要思路还是寻找状态方程。我们来看这一题,需要用到三维动态规划。先放上主代码 dp = [[[0, 0] for _ in range(k+1)] for _ in range(n)] for i in range(1, n): for j in range(1, k+1): dp[i][j][0] = max(dp[i-1][j][0], dp[i-1][j][1] + pri原创 2020-12-28 21:28:19 · 153 阅读 · 0 评论 -
动态算法精讲,leetcode-力扣LCP 07.传递信息
首先直接看题目:我们用 dp[i][j] 表示数组的第 i 轮传递给编号 j 的人的方案数。动态规划初始化条件:n名玩家参加,K轮,其中一开始信息在玩家0上,有且只有一种开始条件,这里代表第0轮dp = [[0]*n for _ in range(k+1)]其中一开始信息在玩家0上,有且只有一种开始条件dp[0][0] = 1动态规划状态转移方程:若能传递给编号 y 玩家的所有玩家编号 x1,x2,x3… , 则第 i+1 轮传递信息给编号 y 玩家的递推方程为dp[i+1][y] =原创 2020-11-18 18:28:08 · 234 阅读 · 0 评论