![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
python
文章平均质量分 76
不染_是非
给时光以生命 而不是给生命以时光
展开
-
Dijkstra求最短路篇二(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)
堆优化版dijkstra适合稀疏图堆优化版的dijkstra是对朴素版dijkstra进行了优化,在朴素版dijkstra中时间复杂度最高的寻找距离最短的点O(n^2)可以使用最小堆优化。一号点的距离初始化为零,其他点初始化成无穷大。将一号点放入堆中。不断循环,直到堆空。每一次循环中执行的操作为:弹出堆顶(与朴素版diijkstra找到S外距离最短的点相同,并标记该点的最短路径已经确定)。用该点更新临界点的距离,若更新成功就加入到堆中。时间复杂度分析OnO(n)OnOn。原创 2024-06-01 22:54:46 · 636 阅读 · 0 评论 -
Dijkstra求最短路篇一(全网最详细讲解两种方法,适合小白)(python,其他语言也适用)
Dijkstra求最短路问题是图论的经典问题,首先介绍一下迪杰斯特拉算法采用的是一种贪心的策略。用一个 dist 数组保存源点到其余各个节点的距离,dist[i] 表示源点到节点 i 的距离。初始时,dist数组的各个元素为无穷大。用一个状态数组 state 记录是否找到了源点到该节点的最短距离,state[i] 如果为真,则表示找到了源点到节点 i 的最短距离,state[i] 如果为假,则表示源点到节点 i 的最短距离还没有找到。初始时,state 各个元素为假。源点到源点的距离为 0。原创 2024-06-01 22:54:35 · 803 阅读 · 0 评论 -
AcWing 846. 树的重心(dfs)(全网最详细讲解)(python版本,其他语言也能听懂)
本题最难理解的还是递归部分了,因为我们做的递归大部分都是在递归前处理数据,如果在递归后处理数据就比较难理解了。递归比较绕,但只要从后往前来推导就比较好理解了。原创 2024-05-29 01:14:24 · 928 阅读 · 0 评论 -
pycharm安装与专业版激活
专业版是收费的,Professional社区版是免费的 Free Community社区版,就是阉割版的专业版,除了一些功能没有以外,他是用来解决工作问题的。部分功能没法用(例如:Web开发,Python Web框架,Python的探查,远程开发能力,数据库和SQL支持)专业版,功能丰富。对开发者来说十分棒,十分专业的开发工具。原创 2024-05-18 17:56:23 · 625 阅读 · 1 评论 -
AcWing 1264. 动态求连续区间和 ,详细讲解线段树与树状数组(Python,篇一)
自己写了半天的博客发现还是水平有限,介绍的知识点不太全面,这里引用一篇其他博主的线段树介绍什么是线段树,介绍的内容很细也很好理解。这里说明一下问什么要开4n倍的数组空间:设最后有n个叶结点,对应的满二叉树最多有2n个叶结点(这是因为极端情况是倒数第二层区间长度1,2交替) 然后根据(2n)+n+n/2…<=4n下面结合具体题目来看看如何用线段树解决实际问题。原创 2024-04-25 21:19:35 · 888 阅读 · 0 评论 -
AcWing 95. 费解的开关(python超详细讲解)(递推)(位运算)
本题涉及的知识点还是比较广的,难点也比较多,一个是递推的确立,一个是第一行的固定,一个是如何用代码实现第一行的固定,还有一个是python标准库copy的使用(深拷贝与浅拷贝的区别与使用)。原创 2024-04-19 01:21:46 · 752 阅读 · 0 评论 -
python中对列表的复制操作(浅拷贝与深拷贝)
综上所述,path = num[:]和path = num.copy()是浅拷贝操作,会共享内部对象的引用,而path = copy.deepcopy(num)是深拷贝操作,会创建完全独立的副本。根据具体的需求,选择适合的复制方式来确保数据的安全性。使用深拷贝就可以完美解决多维数组中对原数组的保留和修改问题。原创 2024-04-19 00:03:58 · 1049 阅读 · 0 评论 -
X的因子链(数论,python)(算术基本定理)(欧拉筛法)
本题还是比较有难度的,自己也是花费了两小时才搞懂。原创 2024-04-03 01:07:40 · 816 阅读 · 0 评论 -
线性筛法求素数(欧拉筛法)(求质数,O(n)时间复杂度)(外加求每个整数的最小质因子)(python)
欧拉筛法是很多数论题型解法的“敲门砖”,下篇博客将讲解一道比较难的数论题,该题用到了本篇博客的欧拉筛法和最小质因子求法。原创 2024-04-03 00:02:46 · 439 阅读 · 0 评论 -
蓝桥杯:大臣的旅费(dfs,bfs,python)(树的直径问题)(图的存储之用数组作为邻接表)
本篇博客可以说是上一篇博客的延伸版,上一篇博客全球变暖,讲解bfs和dfs更详细的,本篇博客更多的是邻接表的构建和树的直径问题。原创 2024-03-31 00:27:50 · 1198 阅读 · 0 评论 -
蓝桥杯:全球变暖(python,BFS,DFS)(栈溢出的处理办法)
本题看着很简单,但是统计问题解决实现起来还是有点绕的。原创 2024-03-30 18:41:56 · 1114 阅读 · 2 评论 -
蓝桥:重新排序(差分,python)
本题是第十三届蓝桥杯省赛的题,掌握了差分做起来会发现很简单,用纯暴力做法思考起来也不是很难。原创 2024-03-20 18:15:07 · 889 阅读 · 0 评论 -
二维前缀和&二维差分(超详细,python版,其他语言也很轻松能看懂)
二维前缀和&二维差分也是竞赛经常考的题型,二维差分的重点在于差分数组的构造和区间的加减的,总结起来就两个公式;;;;两篇博客详细讲解了一维和二维的差分和前缀和,并给出了两种方法的模板题。原创 2024-03-18 23:54:07 · 1525 阅读 · 0 评论 -
一维前缀和&一维差分(下篇讲解二维前缀和&二维差分)(超详细,python版,其他语言也很轻松能看懂)
一维差分 给区间[l,r]中的数加上一个c:b[l] +=c,b[r + 1] -= c前缀和&差分可以说是算法竞赛中必考的知识点,需要熟练掌握。原创 2024-03-18 19:48:35 · 916 阅读 · 0 评论 -
Acwing:730. 机器人跳跃问题(二分法)
机器人正在玩一个古老的基于 DOS 的游戏。游戏中有 N+1 座建筑——从 0 到 N 编号,从左到右排列。编号为 0 的建筑高度为 0个单位,编号为 i的建筑高度为 H(i) 个单位。起初,机器人在编号为 0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第 k个建筑,且它现在的能量值是 E,下一步它将跳到第 k+1 个建筑。如果 H(k+1)>E,那么机器人就失去 H(k+1)−E的能量值,否则它将得到 E−H(k+1)的能量值。原创 2024-03-17 22:53:49 · 441 阅读 · 0 评论 -
蓝桥:保险箱(Python,动态规划)
省赛10分的题,结果写了半天ac了25%,拿了3分,之后看到类似的题分析到状态就要考虑是否能用dp来解决。原创 2024-03-17 00:35:25 · 1281 阅读 · 0 评论 -
奇怪的比赛(Python,递归,状态压缩动态规划dp)
状态压缩dp还是比较难的,但把dp的定义吃透就比较好理解了。原创 2024-03-16 21:37:56 · 1083 阅读 · 1 评论 -
蓝桥:管道(python,二分法,区间合并)
复盘一遍后发现本题其实并不难,但是这个二分思想说实话很难想到。原创 2024-03-16 16:15:16 · 1109 阅读 · 0 评论 -
蓝桥:硬币兑换(python)
小蓝手中有2023种不同面值的硬币,这些硬币全部是新版硬币,其中第i(1≤i≤2023)种硬币的面值为i,数量他为i个。硬币兑换机可以进行硬币兑换,兑换规则为:交给硬币兑换机两个新版硬币coin1和coin2,硬币兑换机会兑换成一个面值为coin1十coin2的旧版硬币。小蓝可以用自己有的硬币进行任意次数兑换,假设最终小蓝手中有K种不同面值的硬币(只看面值, 不看新旧) 第i(1≤i≤K)种硬币的个数为sumi。小蓝想要使得。原创 2024-03-16 14:17:10 · 1112 阅读 · 4 评论 -
Python:复制列表,禁止函数修改列表(副本,切片表示法[:])(篇1:浅拷贝)
我们经常需要根据既有列表创建全新的列表。下面来介绍复制列表的工作原理,以及复制列表可提供极大帮助的一种情形。要复制列表,可创建一个包含整个列表的切片,方法是同时省略起始索引和终止索引([:])。这让Python 创建一个始于第一个元素、终止于最后一个元素的切片,即整个列表的副本。例如,假设有一个列表包含你最喜欢的四种食品,而你想再创建一个列表,并在其中包含一位朋友喜欢的所有食品。首先,创建一个你喜欢的食品列表,名为my_foods。然后创建一个名为friend_foods的新列表。原创 2024-02-27 23:14:01 · 1092 阅读 · 0 评论 -
Python:sort()函数,sorted()函数和reverse()函数的用法和区别
Python 方法sort()让你能够较为轻松地对列表进行排序。假设你有一个汽车列表,并要让其中的汽车按字母顺序排列。为简化这项任务,假设该列表中的所有值都是小写的。方法sort()永久性地修改列表元素的排列顺序。还可以按与字母顺序相反的顺序排列列表元素,只需向sort()方法传递参数reverse=True即可。原创 2024-02-27 22:29:18 · 376 阅读 · 0 评论 -
力扣:42. 接雨水 & 84.柱状图中最大的矩形(单调栈,双指针)
这两道题解题思路类似,一个是单调递增栈,一个是单调递减栈。本篇博客给出暴力,双指针和单调栈解法。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例 1:输入:输出:解释:示例 2:输入:输出:提示:本题暴力解法也是也是使用双指针。首先要明确,要按照行来计算,还是按照列来计算。按照行来计算如图:按照列来计算如图:按照列来计算,比较容易理解,接下来看一下按照列如何计算。首先,如果按照列来计算的话,宽度一定是1了,我们再把每一列的雨水的高度求出来就可以了。原创 2024-02-05 15:15:01 · 997 阅读 · 0 评论 -
动态规划之买卖股票问题(篇三)(买卖股票的最佳时机)
别忘了状态四,状态四是冷冻期,最后一天如果是冷冻期也可能是最大值。原创 2024-01-30 18:19:50 · 785 阅读 · 0 评论 -
动态规划之买卖股票问题(篇二)(买卖股票的最佳时机)
本篇博客主要讲解和,是上篇博客中股票问题的进阶。原创 2024-01-26 21:40:25 · 969 阅读 · 0 评论 -
动态规划之买卖股票问题(篇一)(买卖股票的最佳时机)
本篇博客和接下来的几篇博客主要讲解一下中的,本篇博客主要讲解和。原创 2024-01-26 00:39:34 · 951 阅读 · 0 评论 -
打家劫舍系列(三合一)(动态规划)
打家劫舍系列跟背包问题比起来还是比较简单和好理解的劫舍系列简单来说就是 数组上连续元素二选一,成环之后连续元素二选一,在树上连续元素二选一,所能得到的最大价值。原创 2024-01-23 15:37:42 · 983 阅读 · 0 评论 -
动态规划:完全背包问题
本题力扣上没有,是刷的卡码网第52题感兴趣的小伙伴可以去刷一下,是ACM模式。原创 2024-01-20 22:19:46 · 864 阅读 · 0 评论 -
力扣:474. 一和零(动态规划)(01背包)
给你一个二进制字符串数组 strs 和两个整数 m 和 n。请你找出并返回 strs 的最大子集的长度,该子集中 最多 有 m 个 0 和 n 个 1。如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集。输入:输出:4解释:最多有 5 个 0 和 3 个 1 的最大子集是 {“10”,“0001”,“1”,“0”} ,因此答案是 4。其他满足题意但较小的子集包括 {“0001”,“1”} 和 {“10”,“1”,“0”}。原创 2024-01-20 15:07:27 · 980 阅读 · 0 评论 -
力扣:494. 目标和(动态规划)(01背包)
给你一个非负整数数组 nums 和一个整数 target。向数组中的每个整数前添加 ‘+’ 或 ‘-’ ,然后串联起所有整数,可以构造一个 表达式例如,nums = [2, 1] ,可以在 2 之前添加 ‘+’ ,在 1 之前添加 ‘-’ ,然后串联起来得到表达式 “+2-1”。返回可以通过上述方法构造的、运算结果等于 target 的不同 表达式 的数目。1:输入:输出:5解释:一共有 5 种方法让最终目标和为 3。输入:输出:1。原创 2024-01-20 14:09:12 · 1556 阅读 · 0 评论 -
力扣:416. 分割等和子集 & 1049. 最后一块石头的重量 II (动态规划)(二合一,一次吃透两道题)
有一堆石头,用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下:如果 x == y,那么两块石头都会被完全粉碎;如果 x!= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。最后,最多只会剩下一块 石头。返回此石头 最小的可能重量。如果没有石头剩下,就返回 0。原创 2024-01-18 23:30:21 · 1144 阅读 · 0 评论 -
动态规划:01背包问题(二)
在一维dp数组中,dp[j]表示:容量为j的背包,所背的物品价值可以最大为dp[j]。原创 2024-01-18 03:00:00 · 1245 阅读 · 0 评论 -
动态规划:01背包问题(一)
首先从dp[i][j]的定义出发,如果背包容量j为0的话,即dp[i][0],无论是选取哪些物品,背包价值总和一定为0。如图:在看其他情况。状态转移方程 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - weight[i]] + value[i]);可以看出i 是由 i-1 推导出来,那么i为0的时候就一定要初始化。dp[0][j],即:i为0,存放编号0的物品的时候,各个容量的背包所能存放的最大价值。原创 2024-01-16 00:56:28 · 912 阅读 · 0 评论 -
343. 整数拆分(动态规划)
给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。示例 1:输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: n = 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。原创 2024-01-15 00:16:18 · 932 阅读 · 1 评论 -
其他排序(基数排序,希尔排序和桶排序)(数据结构课设篇3,python版)(排序综合)
本篇博客主要详细讲解一下其他排序(基数排序,希尔排序和桶排序)也是排序综合里最后一篇博客。第一篇博客讲解的是LowB三人组(冒泡排序,插入排序,选择排序),第二篇博客讲解的是NB三人组(堆排序,归并排序和快速排序)。random和time库的用法在第一篇冒泡排序里讲解过。数据结构课设实验内容和要求也在第一篇博客中。原创 2024-01-06 23:55:43 · 906 阅读 · 1 评论 -
NB三人组(堆排序,归并排序,快速排序)(数据结构课设篇2,python版)(排序综合)
之前的LowB三人组是看代码里的注释就可以理解,没有必要讲。而NB三人组的每趟排序的详细过程步骤篇幅太长,不太好讲,也不好找图片,只能粗略带大家过一遍。通过运行时间可以明显看出NB三人组的运行效率比LowB三人组快很多,不过NB三人组的算法思想稍微有点难理解,如果理解了代码还是较容易实现,我认为难点在递归调用的理解上面,每一趟的排序实现还是容易写出来的。排序综合还剩下最后一篇其他排序的讲解就结束了。原创 2024-01-06 01:43:45 · 788 阅读 · 2 评论 -
LowB三人组(冒泡排序,插入排序,选择排序)(数据结构课设篇1,python版)(排序综合)
LowB三人组还是比较简单和好理解的,接下来的博客会讲解NB三人组(堆排序,归并排序和快速排序),第三篇博客会讲解其他排序(基数排序,希尔排序和桶排序)。原创 2024-01-05 22:39:48 · 849 阅读 · 1 评论 -
力扣:63. 不同路径 II(动态规划)
一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格中的障碍物和空位置分别用 1 和 0 来表示。示例 1:输入:obstacleGrid = [[0,0,0],[0,1,0],[0,0,0]]输出:2解释:3x3 网格的正中间有一个障碍物。原创 2023-12-30 22:16:49 · 1048 阅读 · 0 评论 -
力扣:62. 不同路径(动态规划,附python二维数组的定义)
写过很多要定义二维数组的题了,但依然是一写就忘,这里稍微说一下python中二维数组的定义,# 创建一个n×m的二维数组,初始值为0 np.ones((n, m)) 初始值为1。原创 2023-12-30 21:27:23 · 1215 阅读 · 0 评论 -
力扣:509. 斐波那契数(动态规划,附带递归版本) 详细讲解动态规划的思路
斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n)。示例 1:输入:n = 2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1示例 2:输入:n = 3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2示例 3:输入:n = 4。原创 2023-12-29 14:11:18 · 534 阅读 · 0 评论 -
力扣:968. 监控二叉树(贪心,二叉树)
给定一个二叉树,我们在树的节点上安装摄像头。节点上的每个摄影头都可以监视其父对象、自身及其直接子对象。计算监控树的所有节点所需的最小摄像头数量。示例 1:输入:[0,0,null,0,0]输出:1解释:如图所示,一台摄像头足以监控所有节点。示例 2:输入:[0,0,null,0,null,0,null,null,0]输出:2解释:需要至少两个摄像头来监视树的所有节点。上图显示了摄像头放置的有效位置之一。提示:给定树的节点数的范围是 [1, 1000]。原创 2023-12-29 10:00:00 · 999 阅读 · 0 评论