数据结构和算法
文章平均质量分 92
数据结构和算法是程序设计的核心所在,也是面试常考的知识点。这个专栏的内容包括数据结构和算法的讲述,以及LeetCode相关题目的讲解。
伟大的车尔尼
走自己的路,让别人去说吧!
展开
-
栈和队列的概念
文章目录栈、队列和双端队列栈队列双端队列Java 中的栈、队列和双端队列单调栈和单调队列二叉堆和优先队列二叉堆优先队列栈、队列和双端队列栈和队列是常见的数据结构。栈的特点是后进先出,添加元素、删除元素和查看元素都在栈顶操作。队列的特点是先进先出,添加元素在队尾操作,删除元素和查看元素在队首操作。双端队列比栈和队列更加灵活,可以在双端队列的两端添加元素、删除元素和查看元素。栈、队列和双端队列都满足每次添加元素、删除元素和查看元素的时间复杂度是 O(1)O(1)O(1)。栈、队列和双端队列都可以基于数原创 2022-04-14 18:00:00 · 4220 阅读 · 0 评论 -
数据结构和算法文章目录
文章目录算法 + 数据结构 = 程序数据结构概述常用数据结构高级数据结构算法概述数学算法 + 数据结构 = 程序Pascal 之父尼古拉斯·沃斯(Nicklaus Wirth)凭借一句话获得了图灵奖,让他获得图灵奖的是他提出的著名公式:算法 + 数据结构 = 程序。数据结构和算法是程序中的两个不同的概念,又有所联系。数据结构是数据的表示形式,算法是解决问题的流程,算法在程序中的体现是函数或方法。算法中经常用到数据结构,因此数据结构和算法之间存在密切的联系。数据结构概述数据结构虽然有多种类型,但是大原创 2021-06-08 19:03:27 · 190 阅读 · 0 评论 -
排序题目:警告一小时内使用相同员工卡大于等于三次的人
得到每个员工使用员工卡的时间列表之后,对于每个员工,将该员工使用员工卡的时间列表排序,然后遍历时间列表,判断员工是否收到系统警告,将收到系统警告的员工名字添加到结果列表中。,则存在连续三次使用员工卡的时间在一小时内,该员工会收到警告。为了判断每个员工是否收到系统警告,需要记录每个员工使用员工卡的时间并判断是否存在一小时内使用三次员工卡的情况。,使用哈希表记录每个员工使用员工卡的时间列表,时间列表中的每个元素都是打卡时间转换成的分钟数表示。,即可将该员工的名字添加到结果列表中,然后结束遍历该员工的时间列表。原创 2024-08-26 18:00:00 · 540 阅读 · 0 评论 -
排序题目:检查一个字符串是否可以打破另一个字符串
如果两个有序字符串之间不存在打破关系,则两个字符串的任意排列之间都不存在打破关系。升序排序之后,判断两个字符串的排列是否存在打破关系的方法是:同时遍历两个排序后的字符串。因此如果两个有序字符串之间不存在打破关系,则两个字符串的任意排列之间都不存在打破关系。分别升序排序之后,如果两个有序字符串之间存在打破关系,由于两个有序字符串分别是。如果两个有序字符串之间不存在打破关系,则存在两个不同的下标。的排列使得一个字符串的排列可以打破另一个字符串的排列。的值判断两个字符串的排列是否存在打破关系。原创 2024-08-22 18:00:00 · 680 阅读 · 0 评论 -
排序题目:字母异位词分组
可以将字符串排序之后的有序字符串作为同一组字母异位词的标志,使用哈希表存储每个标志对应的所有字符串,则哈希表中的每个键值对表示一组字母异位词,其中关键字表示该组字母异位词的标志,值表示属于该组字母异位词的所有字符串组成的列表。根据字母异位词的定义,两个互为字母异位词的字符串包含的字符完全相同,只有顺序可能不同,因此两个互为字母异位词的字符串中,相同字符的出现次数相同。可以将每个字符的出现次数作为同一组字母异位词的标志,使用哈希表存储每个标志对应的所有字符串,将同一组字母异位词的标志作为哈希表的关键字。原创 2024-08-19 18:00:00 · 563 阅读 · 0 评论 -
排序题目:餐厅过滤器
由于只有符合三个过滤器条件的餐馆会包含在结果中,因此首先使用三个过滤器对餐馆过滤,排除不符合三个过滤器条件的餐馆,然后对符合三个过滤器条件的餐馆基于评分和编号降序排序。创建排序列表存储符合三个过滤器条件的餐馆,排序列表用于对餐馆排序。由于排序的依据只有评分和编号,因此排序列表中只需要存储餐馆的编号和评分。将所有符合三个过滤器条件的餐馆加入排序列表之后,对列表排序,需要自定义如下排序规则。的情况下,餐馆才符合条件。排序之后,创建结果列表,依次将排序列表中的每个餐馆的编号添加到结果列表中,最后返回结果列表。原创 2024-08-15 18:00:00 · 974 阅读 · 0 评论 -
排序题目:重新排列日志文件
由于日志类型由除了标识符以外的字符决定,因此可以得到除了标识符以外的第一个非空格字符,根据该字符是字母或数字决定日志类型是字母日志或数字日志。由于对日志排序的规则是将字母日志和数字日志分别按照不同的规则排序且数字日志在字母日志之后,因此可以将字母日志和数字日志分别存入两个列表,然后分别排序,排序后合并到同一个数组中。对字母日志排序之后,按照排序后的顺序将每个字母日志添加到结果数组中,然后按照原始顺序将每个数字日志添加到结果数组中,即可得到重新排列的日志顺序。得到所有日志的类型之后,即可对日志排序。原创 2024-08-12 18:00:00 · 933 阅读 · 0 评论 -
排序题目:两点之间不包含任何点的最宽垂直面积
将所有点的横坐标升序排序之后,遍历排序后的横坐标,对于每一对相邻的横坐标计算横坐标之差,即为这对相邻的横坐标之间的垂直区域的宽度。的情况是不符合垂直区域的要求的。因此,需要将所有点的横坐标升序排序,排序后的横坐标中的相邻两个横坐标之间的区域是不包含任何点的垂直区域。由于垂直区域的宽度只和每个点的横坐标有关,因此只需要知道每个点的横坐标即可计算最宽垂直区域的宽度。之间的区域是不包含任何点的垂直区域,则其他任何点的横坐标。的时间,遍历排序后的新数组计算最宽垂直区域的宽度需要。为宽度最大的一个垂直区域。原创 2024-08-08 18:00:00 · 788 阅读 · 0 评论 -
排序题目:数组序号转换
由于相等元素的序号相同,每个数字的需要应该尽可能小,因此遍历排序后的数组的过程中,计算元素对应的序号的做法是:遇到相等元素则序号不变,遇到不相等的元素则序号加。为了得到数组元素的序号,并按照原数组将每个元素替换成序号,需要复制原数组并对复制后的数组升序排序,根据排序后的数组得到每个元素对应的序号。创建结果数组,将原数组中的每个元素对应的序号填入结果数组,最后返回结果数组。该做法可以确保不相等的元素的序号一定不同,且每个元素的序号最小。,更新后的序号为下一个更大的元素的序号;解释:相等的元素有相同的序号。原创 2024-08-05 18:00:00 · 642 阅读 · 0 评论 -
排序题目:根据字符出现频率排序
首先遍历字符串获得每个字符的频率,然后定义二元组类型存储每个字符和频率,使用列表存储全部二元组,并对列表排序。由于将字符填入结果字符串时,只有当一个字符根据频率全部填入结果字符串之后才会填入另一个字符,因此相同字符在结果字符串中的下标一定是连续的。遍历排序后的列表,对于列表中的每个二元组,将字符根据频率填入结果字符串中。这道题要求将给定的字符串按照字符频率降序排序,因此需要获得每个字符的频率,然后排序。是不同字符的类型,这道题中的字符类型包括大小写英语字母和数字,是不正确的,因为相同的字母必须放在一起。原创 2024-08-01 18:00:00 · 788 阅读 · 0 评论 -
排序题目:按照频率将数组升序排序
首先遍历数组获得每个元素的频率,然后定义二元组类型存储每个元素的元素值和频率,使用列表存储全部二元组,并对列表排序。遍历排序后的列表,对于列表中的每个二元组,将元素值根据频率填入排序后的数组中。遍历结束之后即可得到完整的排序后的数组。这道题要求将给定的数组按照元素频率排序,因此需要获得每个元素的频率,然后排序。如果有多个值的频率相同,按照数值本身将它们。如果两个二元组的频率相同,则根据元素值降序排序。如果两个二元组的频率不同,则根据频率升序排序;标题:按照频率将数组升序排序。,将数组按照每个值的频率。原创 2024-07-29 18:00:00 · 1015 阅读 · 0 评论 -
排序题目:数组的相对排序
得到每个元素的出现次数,使用计数数组记录每个元素的出现次数。又由于遍历元素的顺序是遍历计数数组的顺序,因此排序结果符合升序顺序,且不在数组。,对于每个元素,从计数数组中得到该元素的计数,并将该元素根据计数的数量填入。中的元素是第二部分,对两部分元素分别排序之后拼接,得到排序后的数组。由于数组中的元素范围有限,因此可以使用不基于比较的计数排序将数组。遍历计数数组,对于每个元素,将该元素根据计数的数量填入。,因此遍历计数数组的过程中填入的元素一定是不在数组。的时间将元素填入排序后的数组,因此时间复杂度是。原创 2024-07-25 18:00:00 · 538 阅读 · 0 评论 -
排序题目:通过翻转子数组使两个数组相等
如果数组targettarget和arrarr的元素不完全相同,则targettarget中至少有一个元素是arrarr中没有的,因此不可能通过翻转arrarr的子数组将arrarr变成与targettarget相同。如果数组targettarget和arrarr的元素完全相同,则targettarget中的每一个元素都在arrarr中有一个对应的元素。对于i≥0i \ge 0i≥0,第iii次翻转子数组时,找到下标jjj使得i≤j。原创 2024-07-22 18:00:00 · 737 阅读 · 0 评论 -
排序题目:最短无序连续子数组
存在无序子数组,则在从左到右遍历数组的过程中会遇到当前元素小于已经遍历过的元素的情况,在从右到左遍历数组的过程中会遇到当前元素大于已经遍历过的元素的情况,即遍历到的元素的大小不符合单调性。在从左到右遍历数组的过程中,从栈底到栈顶的下标对应的元素单调递增(非严格);在从右到左遍历数组的过程中,从栈底到栈顶的下标对应的元素单调递减(非严格)。的时间,遍历两个数组寻找最短无序子数组的开始下标和结束下标需要。如果存在元素不同的下标,则最短无序子数组的下标范围是。如果不存在元素不同的下标,则最短无序子数组的长度是。原创 2024-07-18 18:00:00 · 691 阅读 · 0 评论 -
排序题目:相对名次
位运动员的相对名次,需要将运动员按照得分降序排序,排序的同时需要保留运动员的下标信息。遍历排序后的二维数组,得到每个名次对应的运动员在原始数组中的下标位置,将该名次对应的获奖情况填入结果数组中的相应下标位置。列,每一行分别记录每一位运动员的得分与该运动员在原始数组中的下标。对二维数组按照得分降序排序,排序后的二维数组中,第。位运动员在比赛中的得分。名的运动员在原始数组中的下标位置(的二维数组并排序,排序需要。的运动员得分最高,名次第。的时间,因此时间复杂度是。的时间,排序后遍历需要。位运动员的获奖情况。原创 2024-07-15 18:00:00 · 675 阅读 · 0 评论 -
排序题目:最小时间差
将分钟数组排序之后,最小时间差一定是数组中的两个相邻时间之差,或者数组的首元素与末元素之差加上。遍历排序后的分钟数组中的每一对相邻元素(包括首元素与末元素)计算时间差,即可得到最小时间差。首先将时间列表中的每个时间都转换成分钟数表示,得到分钟数组,则分钟数组的每个元素都在范围。的形式表示,返回列表中任意两个时间的最小时间差的分钟数表示。的递归调用栈空间,因此空间复杂度是。的分钟数组并排序,排序需要。的时间,排序后遍历数组需要。的分钟数组并排序,数组需要。小时制的时间列表,时间以。的时间,因此时间复杂度是。原创 2024-07-11 18:00:00 · 868 阅读 · 0 评论 -
排序题目:错误的集合
为了找到丢失的数字,可以使用哈希表记录数组中每个数字的出现次数,然后寻找重复的数字和丢失的数字。一次,每次会将一个元素交换到正确的下标位置,因此每个元素的访问次数是常数次,时间复杂度是。不幸的是,因为数据错误,集合中某一个数字复制成了集合中的另外一个数字,导致集合。重复的数字一定在数组中出现两次,因此遍历数组一定可以找到重复的数字。因此,遍历数组并计算每一对相邻元素之差,即可找到重复的数字和丢失的数字。升序排序,然后遍历数组寻找重复的数字和丢失的数字。时,遍历数组可以找到丢失的数字(包括丢失的数字是。原创 2024-07-08 18:00:00 · 713 阅读 · 0 评论 -
排序题目:三个数的最大乘积
根据上述分析可知,当乘积最大时,三个数的可能情况有两种,一是选数组中最大的三个数,二是选数组中最大的一个数与最小的两个数。如果数组中的所有元素都是负数,则任意三个数的乘积都是负数,为了使乘积最大应该使乘积的绝对值最小,数组中的最大三个数即为绝对值最小的三个数,乘积即为最大乘积。由于计算最大乘积只需要得到数组中最大的三个元素与最小的两个元素,并不需要得到所有元素的顺序,因此可以直接遍历数组找到最大的两个元素。如果数组中的所有元素都是非负数,则任意三个数的乘积都是非负数,数组中的最大三个数的乘积即为最大乘积。原创 2024-07-04 18:00:00 · 608 阅读 · 0 评论 -
排序题目:多数元素 II
这道题是「多数元素」的进阶,要求找出数组中所有出现次数大于⌊n3⌋⌊3n⌋的元素。这道题也可以使用哈希表计数、排序和摩尔投票三种解法得到答案。长度是nnn的数组中,最多有222个出现次数大于⌊n3⌋⌊3n⌋的元素。可以使用反证法证明。假设有333个出现次数大于⌊n3⌋⌊3n⌋的元素,这333个元素的出现次数都不小于⌊n3⌋1⌊3n⌋1,因此这333个元素的总出现次数至少为3×⌊n3⌋3。原创 2024-07-01 18:00:00 · 1170 阅读 · 0 评论 -
排序题目:找不同
多一个字母,其余字母都相同只是顺序可能不同,因此将两个字符串排序之后,除了多出的一个字母以外,两个有序字符串相同。中被添加的字母对应的 ASCII 码,根据该 ASCII 码即可得到被添加的字母。中被添加的字母对应的 ASCII 码,根据该 ASCII 码即可得到被添加的字母。中一定存在一个计数为负,该计数对应的字母即为被添加的字母。中的所有字母的 ASCII 码的按位异或的结果即为。中的出现次数,该字母即为被添加的字母,返回该字母。结束时没有遇到不同的字母,则被添加的字母是。原创 2024-06-27 18:00:00 · 657 阅读 · 0 评论 -
排序题目:丢失的数字
一次,每次会将一个元素交换到正确的下标位置,因此每个元素的访问次数是常数次,时间复杂度是。内的每个数字,如果遇到不在哈希集合中的数字,则该数字是丢失的数字,返回该数字。内,因此依次遍历该范围的数字,判断每个数字是否在哈希集合中。如果数组中没有数字丢失,则排序后的数组中,每个下标处的元素值都等于下标值。为了找到丢失的数字,可以使用哈希集合存储数组中的数字,然后寻找不在哈希集合中的数字。个整数中出现一次,因此每个未丢失的数字出现两次,丢失的数字出现一次。内的每个数字都在哈希集合中,则丢失的数字是。原创 2024-06-24 18:00:00 · 765 阅读 · 0 评论 -
排序题目:有序数组的平方
的过程中,每次遍历的元素都是尚未遍历的元素中的绝对值最大的元素,因此遍历元素的顺序是绝对值非递增顺序,即元素的平方非递增顺序。将遍历的元素的平方反向填入新数组,新数组中的元素顺序为非递减顺序。的所有元素都是非负数,元素顺序为绝对值非递减顺序,首个元素的绝对值最小,末尾元素的绝对值最大;的所有元素都是非正数,元素顺序为绝对值非递增顺序,首个元素的绝对值最大,末尾元素的绝对值最小;中的每个元素的平方并存入新数组中,然后对新数组按非递减顺序排序,即可得到排序后的新数组。中的每个元素的平方并存入新数组需要。原创 2024-06-20 18:00:00 · 1581 阅读 · 0 评论 -
排序题目:数组中两元素的最大乘积
由于计算最大乘积只需要得到数组中最大的两个元素,并不需要得到所有元素的顺序,因此可以直接遍历数组找到最大的两个元素。将数组升序排序之后,数组的末尾两个元素即为最大的两个元素,使用末尾两个元素计算乘积即为最大乘积。中的元素都是正整数,为了使得乘积最大,应该选择最大的两个元素。的值等于数组中最大的两个元素值,使用这两个值计算最大乘积。类型的最小值,确保初始值小于数组中的任意元素。的值等于已经遍历的元素中最大的两个元素。中至少有两个元素,因此一定存在两个不同的下标。,可以选择数组的两个不同下标。原创 2024-06-17 18:00:00 · 664 阅读 · 0 评论 -
排序题目:第三大的数
将数组中的元素全部加入哈希集合之后,新建一个数组存储哈希集合中的全部元素,然后对新数组排序,新数组的长度即为数组。如果当前元素不等于上一个遍历到的元素,则当前元素一定小于上一个遍历到的元素(由于数组已经有序),将不同元素个数加。解法一使用哈希集合确保相同的元素只计算一次,也可以直接对原数组排序和遍历,达到确保相同的元素只计算一次的目的。时,存在第三大的不同数,返回新数组中的第三大元素。位置的元素),则没有遇到新的不同元素,跳过当前元素。,则第三大的不同数不存在,返回排序后的数组的末尾元素。原创 2024-06-13 18:00:00 · 1037 阅读 · 0 评论 -
排序题目:有效的字母异位词
由于两个互为字母异位词的字符串包含的字符完全相同,只有顺序可能不同,因此将两个互为字母异位词的字符串排序之后,得到的有序字符串相同。对于进阶问题,如果输入字符串包含 Unicode 字符,则字符集不再局限于小写英语字母,因此不能使用数组维护计数,而是需要使用哈希表维护计数。字母异位词是将另一个单词或词组的字母重新排列之后得到的单词或词组,原始单词或词组中的每个字母恰好使用一次。类型的数组,然后对两个字符数组排序,比较排序后的两个字符数组是否相同。中的计数出现负数时,该计数对应的字符在。原创 2024-06-10 18:00:00 · 837 阅读 · 0 评论 -
排序题目:多数元素
摩尔投票算法由 Robert S. Boyer 和 J Strother Moore 提出,该算法的基本思想是:在每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。遍历数组,使用哈希表记录每个元素的出现次数,遍历结束之后即可得到数组中每个元素的出现次数。排序后的数组满足相等的元素一定出现在数组中的相邻位置,由于多数元素在数组中的出现次数大于。如果多数元素不是数组中的最小元素和最大元素,则排序后的数组的下标。个连续的元素都是多数元素,下标。原创 2024-06-06 18:00:00 · 1004 阅读 · 0 评论 -
排序题目:删除某些元素后的数组均值
计算剩余元素的开始下标和结束下标,得到剩余元素的个数,然后计算剩余元素之和除以剩余元素个数的结果,即为剩余数字的平均值。解释:删除数组中最大和最小的元素后,所有元素都等于。的数字后,计算剩余数字的平均值。排序,排序后的数组中,最前面的。标题:删除某些元素后的数组均值。的结果都被视为正确结果。的时间,总时间复杂度是。的时间,遍历数组需要。原创 2024-06-03 18:00:00 · 802 阅读 · 0 评论 -
排序题目:高度检查器
首先得到学生高度的最大值,然后对每个高度计数。得到计数之后,按照升序顺序同时遍历每个高度和数组。由于要求拍照时学生按照非递减的高度顺序排列,排序后的高度情况是整数数组。的时间,遍历两个数组统计对应元素不相等的下标数量需要。的时间统计高度不匹配的下标数量,总时间复杂度是。的高度顺序排成一行。排序后的高度情况用整数数组。升序排序,即可得到排序后的数组。的元素表示一个高度不匹配的位置。的最大值并对每个高度计数,需要。所有下标的对应学生高度都不匹配。,统计对应元素不相等的下标数量。位的学生的预期高度(下标从。原创 2024-05-30 18:00:00 · 561 阅读 · 0 评论 -
排序题目:最小绝对差
得到最小绝对差之后,再次遍历排序后的数组,计算每一对相邻元素的绝对差,当相邻元素的绝对差等于最小绝对差时,将这一对相邻元素添加到结果列表中,遍历结束之后即可得到所有具有最小绝对差的元素对。由于是遍历排序后的数组寻找具有最小绝对差的元素对,因此遍历元素对的顺序是递增顺序,可以确保结果列表中的元素对按升序的顺序排列。当数组有序时,每个元素的相邻元素是数组中与该元素最接近的元素,因此最小绝对差一定是排序后的数组中的两个相邻元素之差。的元素对按升序的顺序加入列表并返回。,找到所有具有最小绝对差的元素对。原创 2024-05-27 18:00:00 · 836 阅读 · 0 评论 -
排序题目:判断能否形成等差数列
时,数列中的所有元素相等;当公差是正数或负数时,数列分别递增和递减。因此只有当数组有序时,才可能形成等差数列。由于将递减数列反转即可得到递增序列,因此只需要考虑公差非负的情况,即数列中的所有元素相等或数列递增。如果相邻元素之差存在不相等,则排序后的数组不形成等差数列,即不可以重新排列数组形成等差数列。如果相邻元素之差都相等,则排序后的数组形成等差数列,即可以重新排列数组形成等差数列;如果一个数列中,任意相邻两项的差都相等,那么这个数列就称为。,如果可以重新排列数组形成等差数列,返回。,可以形成等差数列。原创 2024-05-22 08:00:00 · 821 阅读 · 0 评论 -
排序实现题目:排序链表
由于链表的结构不同于数组,因此适用于链表的排序种类较少。这道题中,链表的长度最大为5×1045×104,因此时间复杂度是On2O(n^2)On2的排序算法不适合这道题,需要使用时间复杂度更低的排序算法。根据链表的性质,可以使用归并排序对链表排序。归并排序的时间复杂度是OnlognOnlogn,自顶向下实现和自底向上实现的空间复杂度分别是OlognO(\log n)Ologn和O1O(1)O1。原创 2024-05-20 18:00:00 · 616 阅读 · 0 评论 -
排序实现题目:对链表进行插入排序
对链表插入排序,需要维护一个已排序的子链表,排序过程中将未排序的结点插入到已排序的子链表中的合适位置。由于待插入的结点值可能小于已排序的子链表中的最小结点值,为了方便插入操作,需要创建哑结点,将链表的头结点。变成链表的最后一个结点时,所有结点都在已排序的子链表中,整个链表的排序结束。不是链表的最后一个结点时,链表中有尚未排序的结点,下一个待排序的结点是。当整个链表的排序结束之后,返回哑结点的后一个结点,即排序后的链表的头结点。作为哑结点的后一个结点,则每次插入结点的位置一定在哑结点之后。原创 2024-05-16 18:00:00 · 680 阅读 · 0 评论 -
排序实现题目:排序数组
文章目录题目标题和出处难度题目描述要求示例数据范围前言冒泡排序原理示例代码复杂度分析稳定性分析选择排序原理示例代码复杂度分析稳定性分析插入排序原理示例代码复杂度分析稳定性分析希尔排序原理示例代码复杂度分析稳定性分析归并排序原理示例代码复杂度分析稳定性分析快速排序原理示例代码复杂度分析稳定性分析堆排序原理示例代码复杂度分析稳定性分析计数排序原理示例代码复杂度分析稳定性分析桶排序原理示例代码复杂度分析稳定性分析基数排序原理示例代码复杂度分析稳定性分析题目标题和出处标题:排序数组出处:912. 排序数组原创 2024-05-13 18:00:00 · 646 阅读 · 0 评论 -
排序的概念
文章目录排序的基本概念排序的定义排序的分类比较类排序和非比较类排序内部排序和外部排序稳定排序和不稳定排序不同排序算法的概念和实现初级排序算法冒泡排序原理示例复杂度分析稳定性分析代码选择排序原理示例复杂度分析稳定性分析代码插入排序原理示例复杂度分析稳定性分析代码希尔排序原理示例复杂度分析稳定性分析代码高级排序算法归并排序原理示例复杂度分析稳定性分析代码快速排序原理示例复杂度分析稳定性分析代码堆排序原理示例复杂度分析稳定性分析代码线性时间排序算法计数排序原理示例复杂度分析稳定性分析代码桶排序原理示例复杂度分析稳原创 2024-05-09 18:00:00 · 748 阅读 · 0 评论 -
图题目:最大网络秩
文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目标题和出处标题:最大网络秩出处:1615. 最大网络秩难度4 级题目描述要求由 n\texttt{n}n 座城市和一些连接这些城市的道路 roads\texttt{roads}roads 共同组成一个基础设施网络。每个 roads[i] = [ai, bi]\texttt{roads[i] = [a}_\texttt{i}\texttt{, b}_\texttt{i}\textt原创 2024-05-06 18:00:00 · 1734 阅读 · 0 评论 -
图题目:不邻接植花
文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目标题和出处标题:不邻接植花出处:1042. 不邻接植花难度4 级题目描述要求有 n\texttt{n}n 个花园,从 1\texttt{1}1 到 n\texttt{n}n 编号,以及数组 paths\texttt{paths}paths,其中 paths[i] = [xi, yi]\texttt{paths[i] = [x}_\texttt{i}\texttt{, y}_\te原创 2024-05-02 20:00:00 · 1675 阅读 · 0 评论 -
图题目:可以到达所有点的最少点数目
文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目标题和出处标题:可以到达所有点的最少点数目出处:1557. 可以到达所有点的最少点数目难度4 级题目描述要求给定一个有向无环图,包含编号为 0\texttt{0}0 到 n−1\texttt{n} - \texttt{1}n−1 的 n\texttt{n}n 个结点,以及一个数组 edges\texttt{edges}edges,其中 edges[i] = [fromi, toi原创 2024-04-29 18:00:00 · 830 阅读 · 0 评论 -
图题目:找出星型图的中心结点
文章目录题目标题和出处难度题目描述要求示例数据范围解法一思路和算法代码复杂度分析解法二思路和算法代码复杂度分析题目标题和出处标题:找出星型图的中心结点出处:1791. 找出星型图的中心结点难度3 级题目描述要求有一个无向的星型图,由编号从 1\texttt{1}1 到 n\texttt{n}n 的 n\texttt{n}n 个结点组成。星型图有一个中心结点,并且恰有 n - 1\texttt{n - 1}n - 1 条边将中心结点与其他每个结点相连。原创 2024-04-25 18:00:00 · 556 阅读 · 0 评论 -
图题目:找到小镇的法官
文章目录题目标题和出处难度题目描述要求示例数据范围解法思路和算法代码复杂度分析题目标题和出处标题:找到小镇的法官出处:997. 找到小镇的法官难度3 级题目描述要求小镇里有 n\texttt{n}n 个人,编号从 1\texttt{1}1 到 n\texttt{n}n。传言称,这些人中有一个暗地里是小镇法官。如果小镇法官真的存在,那么:小镇法官不会信任任何人。每个人(除了小镇法官)都信任这位小镇法官。只有一个人同时满足属性 1 和属性 2。给定一个数组 trust\textt原创 2024-04-22 18:00:00 · 983 阅读 · 0 评论 -
图的概念和表示
文章目录图的基本概念图的定义图的种类图的术语图的表示方法邻接链表和邻接矩阵其他表示方法图的基本概念图的定义图是由顶点和连接顶点的边组成的数据结构。顶点也称结点或交点,边也称链接。图的种类根据图中的边是否有方向以及是否有权重,可以将图分成无向图和有向图,以及无权图和带权图。无向图中的每条边没有方向,每条边在两个方向上连通;有向图中的每条边有方向,每条边只在一个方向上连通。无权图中的每条边没有权重,每条边的权重相同;带权图中的每条边有权重,权重表示边的特定信息,例如长度或开销。由于每个图一定是无原创 2024-04-18 18:00:00 · 673 阅读 · 0 评论