排序
文章平均质量分 94
排序的概念以及LeetCode的相关题目。
伟大的车尔尼
走自己的路,让别人去说吧!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
排序题目:检查字符串是否可以通过排序子字符串得到另一个字符串
的子字符串排序的过程可以看成冒泡排序,即每次比较两个相邻的字符,只有当前面的字符大于后面的字符时才交换两个字符的位置。中出现的下标位置列表维护一个指针,指向第一个尚未处理的该字符所在下标,当一个字符被处理时,将指针向后移动一位。中存在一个字符,该字符左侧存在尚未处理的字符且所有尚未处理的字符都小于该字符,则该字符不能移动到与。,则根据冒泡排序的稳定性可知,相同字符的相对顺序不会发生变化,因此。和前面的相邻字符交换位置的做法(该过程即为冒泡排序的过程),将。中的该字符所在的最小下标处的字符)。原创 2024-10-21 18:00:00 · 1079 阅读 · 0 评论 -
排序题目:最大间距
最直观的解法是将数组排序之后得到相邻元素之间最大的差值,但是基于比较的排序算法的最低时间复杂度是OnlognOnlogn。只有使用不基于比较的的排序算法才能使用线性时间复杂度解决。原创 2024-10-17 18:00:00 · 794 阅读 · 0 评论 -
排序题目:通过指令创建有序数组
文章目录题目标题和出处难度题目描述要求示例数据范围解法一思路和算法代码复杂度分析解法二预备知识思路和算法代码复杂度分析解法三预备知识思路和算法代码复杂度分析题目标题和出处标题:通过指令创建升序数组出处:1649. 通过指令创建升序数组难度8 级题目描述要求给定一个整数数组 instructions\texttt{instructions}instructions,需要使用 instructions\texttt{instructions}instructions 中的元素创建一个升序数组。原创 2024-10-14 18:00:00 · 1686 阅读 · 0 评论 -
排序题目:计算右侧小于当前元素的个数
定义「逆序对」的概念如下:对于下标iii和jjj,如果iji < jij且numsinumsjnumsinumsj,则下标对ij(i, j)ij是一个逆序对。这道题要求计算数组numsnums中的每个元素右侧小于当前元素的个数,实质是计算每个元素右侧的元素中与当前元素形成逆序对的元素个数。对于长度为nnn的数组,最朴素的计算逆序对的数量的方法是对于每个元素遍历其右边的元素并统计可以形成逆序对的元素个数,每个元素需要OnO(n)On。原创 2024-10-10 18:00:00 · 780 阅读 · 0 评论 -
排序题目:区间和的个数
计算两个升序子数组之间的区间和的个数与合并两个升序子数组的时间复杂度相同,计算区间和的个数并没有提升总时间复杂度,总时间复杂度和原始归并排序一样是。前缀和为数组的前缀子数组的元素和,数组的每个下标对应一个前缀和,根据前缀和可以快速得到任意一个子数组的元素和。前缀和为数组的前缀子数组的元素和,数组的每个下标对应一个前缀和,根据前缀和可以快速得到任意一个子数组的元素和。对两个子数组分别排序并计算区间和的个数,得到两个升序的子数组和两个子数组分别包含的区间和的个数。创建线段树,用于存储列表中的每个元素的名次。原创 2024-10-07 18:00:00 · 1146 阅读 · 0 评论 -
排序题目:翻转对
归并排序的过程中,每次将两个升序子数组合并,合并的过程中即可发现这两个升序子数组中的翻转对。由于计算两个升序子数组之间的翻转对数量以及合并两个升序子数组都需要遍历两个升序子数组,因此计算翻转对数量并没有提升总时间复杂度,总时间复杂度和原始归并排序一样是。对两个子数组分别排序并计算翻转对的数量,得到两个升序的子数组和两个子数组分别包含的翻转对数量。,将子数组分成两个更短的子数组,两个更短的子数组排序之后合并,同时计算翻转对。更新翻转对数量之后,将。的数组,最朴素的计算翻转对的数量的方法的时间复杂度是。原创 2024-10-03 18:00:00 · 1075 阅读 · 0 评论 -
排序题目:重新排列后的最大子矩阵
子矩阵的面积,可以将更新后的矩阵的每一行排序,然后对矩阵的每一行按照从大到小的顺序遍历,计算以该行为底边的最大全。都是正整数),则说明可以将原矩阵重新排列,使得重新排列的矩阵中存在一个以该行为底边的全。由于对矩阵重新排列的规则是按整列重新排列,因此可以对矩阵的每一列做预处理,对于每个元素。经过预处理之后,矩阵中的每个元素更新为该元素向上的最大连续。遍历更新后的矩阵的每一行之后,即可得到最大全。的时间,对更新后的矩阵的每一行排序共需要。对更新后的矩阵的每一行排序需要。的个数,然后即可单独处理矩阵的每一行。原创 2024-09-30 18:00:00 · 918 阅读 · 0 评论 -
排序题目:对角线遍历 II
并使用列表存储每个元素的信息,每个元素需要记录三个信息:元素所在的行下标与列下标之和、元素所在的列下标、元素值,其中元素所在的行下标与列下标之和即为对角线编号。根据对角线遍历的规则,每条对角线的方向是从左下到右上,依次遍历每条对角线,同一条对角线上的元素顺序是列下标升序顺序(或者行下标降序顺序)。由于同一条对角线上的每个位置的行下标与列下标之和是定值,因此可以使用行下标与列下标之和表示对角线编号,对角线编号用于区分不同的对角线。遍历排序后的列表,对于列表中的每个元素,将元素值填入结果数组中。原创 2024-09-26 18:00:00 · 1123 阅读 · 0 评论 -
排序题目:将矩阵按对角线排序
这道题要求对给定矩阵的每条矩阵对角线上的元素按升序排序,因此必须对每条矩阵对角线分别排序。在m×nm \times nm×n的矩阵中有mn−1m + n - 1mn−1条矩阵对角线,最长的矩阵对角线的长度是minmn\min(m, n)minmn。在确定mmm和nnn的情况下,时间复杂度取决于每条矩阵对角线的排序的时间复杂度。由于这道题中mmm和nnn都不超过100100100,因此可以使用时间复杂度较高的初级排序算法,空间复杂度是O1。原创 2024-09-23 18:00:00 · 1569 阅读 · 0 评论 -
排序题目:三次操作后最大值与最小值的最小差
中最大的四个元素与最小的四个元素,即可得到最大值与最小值的最小差值。因此,可以在不排序的情况下遍历数组得到最大的四个元素与最小的四个元素,然后计算最大值与最小值的最小差值。的时间,由于只需要维护四个最大元素和四个最小元素,因此每个元素更新最大与最小元素的时间都是。,则经过最多三次操作之后一定可以使数组中的所有元素相等,此时最小的差是。的时间,排序后需要遍历数组中的四个下标对,遍历的时间是。分别用于存储最大的四个元素与最小的四个元素,初始时。因此为了使最大值与最小值的差最小,应该操作最小的。原创 2024-09-19 18:00:00 · 763 阅读 · 0 评论 -
排序题目:H 指数
不会改变 h 指数的结果。为了方便计算,计数时将每篇论文被引用的次数限制在范围。由于 h 指数值应该取可能的最大值,因此第一个使。根据 h 指数的定义,h 指数不可能超过论文总数,即如果将数组。根据 h 指数的定义,一名科研人员的 h 指数是指其发表的。得到计数之后,反向遍历计数数组,同时维护已经遍历的论文总数。篇论文被引用的次数,计算并返回该研究者的 h 指数。有多种可能的值,其中最大的值作为 h 指数。根据 h 指数的定义,如果已经遍历的。篇论文,每篇论文相应的被引用了。的时间,时间复杂度是。原创 2024-09-16 18:00:00 · 873 阅读 · 0 评论 -
排序题目:一手顺子
Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是。遍历排序后的数组的过程中,遍历元素的顺序是从小到大,因此当遍历到元素。需要使用哈希表记录每个值的出现次数,哈希表的空间是。遍历结束之后,如果没有遇到不可以完成分组的情况,则返回。一定是一个分组中的最小值,因此该分组的取值范围是。排序,遍历排序后的数组判断是否可以根据要求分组。作为一个分组的最小值,判断剩余的牌是否可以组成。遍历排序后的数组的过程中,对于遍历到的每个元素。中的牌分成若干组,每组的牌数都是。原创 2024-09-12 18:00:00 · 1752 阅读 · 0 评论 -
排序题目:删除被覆盖区间
则已经遍历过的区间的结束位置都小于当前区间的结束位置,因此当前区间没有被覆盖,后面的区间也不可能覆盖当前区间(后面区间的开始位置一定大于等于当前区间的开始位置,且当开始位置相等时后面区间的结束位置一定小于当前区间的结束位置),因此将没有被其他区间覆盖的区间个数加。排序之后,相同开始位置的多个区间中,第一个区间是最长的区间,其余的每个区间都是被覆盖的区间。中的所有被其他区间覆盖的区间,需要首先将所有的区间排序,然后判断每个区间是否被其他区间覆盖,计算没有被其他区间覆盖的区间个数。更新为当前区间的结束位置。原创 2024-09-09 18:00:00 · 800 阅读 · 0 评论 -
排序题目:插入区间
由于遍历区间的顺序是按照开始位置升序的顺序,且列表中已有的区间互不重叠,因此当列表不为空时,只需要将新添加的区间和列表中的最后一个区间比较即可。如果列表不为空且当前区间的开始位置小于等于列表中的最后一个区间的结束位置,则将当前区间与列表中的最后一个区间合并,将列表中的最后一个区间的结束位置更新为两个区间的结束位置中的最大值。的过程中,使用列表存储插入操作后的结果区间,应确保遍历所有区间(包括已有的区间和新区间)的顺序是按照开始位置升序的顺序,依次将每个遍历到的区间添加到列表。存储合并后的区间的列表需要。原创 2024-09-05 18:00:00 · 2008 阅读 · 0 评论 -
排序题目:合并区间
对区间排序的方法是,首先将区间按照开始位置升序排序,如果存在多个区间的开始位置相同,则按照结束位置降序排序。排序之后,相同开始位置的多个区间中,第一个区间是最长的区间,对于每个开始位置只需要保留最长的区间。中的所有重叠的区间,需要首先将所有的区间排序,然后判断是否有重叠的区间,并将重叠的区间合并。由于相同开始位置的多个区间只保留最长的区间,因此对于遍历到的每个区间,需要判断该区间与数组。,合并所有重叠的区间,并返回一个不重叠的区间数组,该数组覆盖输入中的所有区间。存储合并后的区间的列表需要。原创 2024-09-02 18:00:00 · 637 阅读 · 0 评论 -
排序题目:颜色分类
这道题是「荷兰国旗问题」,该问题由荷兰计算机科学家 Edsger Wybe Dijkstra 提出。原创 2024-08-29 18:00:00 · 1509 阅读 · 0 评论 -
排序题目:警告一小时内使用相同员工卡大于等于三次的人
得到每个员工使用员工卡的时间列表之后,对于每个员工,将该员工使用员工卡的时间列表排序,然后遍历时间列表,判断员工是否收到系统警告,将收到系统警告的员工名字添加到结果列表中。,则存在连续三次使用员工卡的时间在一小时内,该员工会收到警告。为了判断每个员工是否收到系统警告,需要记录每个员工使用员工卡的时间并判断是否存在一小时内使用三次员工卡的情况。,使用哈希表记录每个员工使用员工卡的时间列表,时间列表中的每个元素都是打卡时间转换成的分钟数表示。,即可将该员工的名字添加到结果列表中,然后结束遍历该员工的时间列表。原创 2024-08-26 18:00:00 · 896 阅读 · 0 评论 -
排序题目:检查一个字符串是否可以打破另一个字符串
如果两个有序字符串之间不存在打破关系,则两个字符串的任意排列之间都不存在打破关系。升序排序之后,判断两个字符串的排列是否存在打破关系的方法是:同时遍历两个排序后的字符串。因此如果两个有序字符串之间不存在打破关系,则两个字符串的任意排列之间都不存在打破关系。分别升序排序之后,如果两个有序字符串之间存在打破关系,由于两个有序字符串分别是。如果两个有序字符串之间不存在打破关系,则存在两个不同的下标。的排列使得一个字符串的排列可以打破另一个字符串的排列。的值判断两个字符串的排列是否存在打破关系。原创 2024-08-22 18:00:00 · 754 阅读 · 0 评论 -
排序题目:字母异位词分组
可以将字符串排序之后的有序字符串作为同一组字母异位词的标志,使用哈希表存储每个标志对应的所有字符串,则哈希表中的每个键值对表示一组字母异位词,其中关键字表示该组字母异位词的标志,值表示属于该组字母异位词的所有字符串组成的列表。根据字母异位词的定义,两个互为字母异位词的字符串包含的字符完全相同,只有顺序可能不同,因此两个互为字母异位词的字符串中,相同字符的出现次数相同。可以将每个字符的出现次数作为同一组字母异位词的标志,使用哈希表存储每个标志对应的所有字符串,将同一组字母异位词的标志作为哈希表的关键字。原创 2024-08-19 18:00:00 · 620 阅读 · 0 评论 -
排序题目:餐厅过滤器
由于只有符合三个过滤器条件的餐馆会包含在结果中,因此首先使用三个过滤器对餐馆过滤,排除不符合三个过滤器条件的餐馆,然后对符合三个过滤器条件的餐馆基于评分和编号降序排序。创建排序列表存储符合三个过滤器条件的餐馆,排序列表用于对餐馆排序。由于排序的依据只有评分和编号,因此排序列表中只需要存储餐馆的编号和评分。将所有符合三个过滤器条件的餐馆加入排序列表之后,对列表排序,需要自定义如下排序规则。的情况下,餐馆才符合条件。排序之后,创建结果列表,依次将排序列表中的每个餐馆的编号添加到结果列表中,最后返回结果列表。原创 2024-08-15 18:00:00 · 1035 阅读 · 0 评论 -
排序题目:重新排列日志文件
由于日志类型由除了标识符以外的字符决定,因此可以得到除了标识符以外的第一个非空格字符,根据该字符是字母或数字决定日志类型是字母日志或数字日志。由于对日志排序的规则是将字母日志和数字日志分别按照不同的规则排序且数字日志在字母日志之后,因此可以将字母日志和数字日志分别存入两个列表,然后分别排序,排序后合并到同一个数组中。对字母日志排序之后,按照排序后的顺序将每个字母日志添加到结果数组中,然后按照原始顺序将每个数字日志添加到结果数组中,即可得到重新排列的日志顺序。得到所有日志的类型之后,即可对日志排序。原创 2024-08-12 18:00:00 · 1011 阅读 · 0 评论 -
排序题目:两点之间不包含任何点的最宽垂直面积
将所有点的横坐标升序排序之后,遍历排序后的横坐标,对于每一对相邻的横坐标计算横坐标之差,即为这对相邻的横坐标之间的垂直区域的宽度。的情况是不符合垂直区域的要求的。因此,需要将所有点的横坐标升序排序,排序后的横坐标中的相邻两个横坐标之间的区域是不包含任何点的垂直区域。由于垂直区域的宽度只和每个点的横坐标有关,因此只需要知道每个点的横坐标即可计算最宽垂直区域的宽度。之间的区域是不包含任何点的垂直区域,则其他任何点的横坐标。的时间,遍历排序后的新数组计算最宽垂直区域的宽度需要。为宽度最大的一个垂直区域。原创 2024-08-08 18:00:00 · 860 阅读 · 0 评论 -
排序题目:数组序号转换
由于相等元素的序号相同,每个数字的需要应该尽可能小,因此遍历排序后的数组的过程中,计算元素对应的序号的做法是:遇到相等元素则序号不变,遇到不相等的元素则序号加。为了得到数组元素的序号,并按照原数组将每个元素替换成序号,需要复制原数组并对复制后的数组升序排序,根据排序后的数组得到每个元素对应的序号。创建结果数组,将原数组中的每个元素对应的序号填入结果数组,最后返回结果数组。该做法可以确保不相等的元素的序号一定不同,且每个元素的序号最小。,更新后的序号为下一个更大的元素的序号;解释:相等的元素有相同的序号。原创 2024-08-05 18:00:00 · 800 阅读 · 0 评论 -
排序题目:根据字符出现频率排序
首先遍历字符串获得每个字符的频率,然后定义二元组类型存储每个字符和频率,使用列表存储全部二元组,并对列表排序。由于将字符填入结果字符串时,只有当一个字符根据频率全部填入结果字符串之后才会填入另一个字符,因此相同字符在结果字符串中的下标一定是连续的。遍历排序后的列表,对于列表中的每个二元组,将字符根据频率填入结果字符串中。这道题要求将给定的字符串按照字符频率降序排序,因此需要获得每个字符的频率,然后排序。是不同字符的类型,这道题中的字符类型包括大小写英语字母和数字,是不正确的,因为相同的字母必须放在一起。原创 2024-08-01 18:00:00 · 866 阅读 · 0 评论 -
排序题目:按照频率将数组升序排序
首先遍历数组获得每个元素的频率,然后定义二元组类型存储每个元素的元素值和频率,使用列表存储全部二元组,并对列表排序。遍历排序后的列表,对于列表中的每个二元组,将元素值根据频率填入排序后的数组中。遍历结束之后即可得到完整的排序后的数组。这道题要求将给定的数组按照元素频率排序,因此需要获得每个元素的频率,然后排序。如果有多个值的频率相同,按照数值本身将它们。如果两个二元组的频率相同,则根据元素值降序排序。如果两个二元组的频率不同,则根据频率升序排序;标题:按照频率将数组升序排序。,将数组按照每个值的频率。原创 2024-07-29 18:00:00 · 1087 阅读 · 0 评论 -
排序题目:数组的相对排序
得到每个元素的出现次数,使用计数数组记录每个元素的出现次数。又由于遍历元素的顺序是遍历计数数组的顺序,因此排序结果符合升序顺序,且不在数组。,对于每个元素,从计数数组中得到该元素的计数,并将该元素根据计数的数量填入。中的元素是第二部分,对两部分元素分别排序之后拼接,得到排序后的数组。由于数组中的元素范围有限,因此可以使用不基于比较的计数排序将数组。遍历计数数组,对于每个元素,将该元素根据计数的数量填入。,因此遍历计数数组的过程中填入的元素一定是不在数组。的时间将元素填入排序后的数组,因此时间复杂度是。原创 2024-07-25 18:00:00 · 678 阅读 · 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 · 810 阅读 · 0 评论 -
排序题目:最短无序连续子数组
存在无序子数组,则在从左到右遍历数组的过程中会遇到当前元素小于已经遍历过的元素的情况,在从右到左遍历数组的过程中会遇到当前元素大于已经遍历过的元素的情况,即遍历到的元素的大小不符合单调性。在从左到右遍历数组的过程中,从栈底到栈顶的下标对应的元素单调递增(非严格);在从右到左遍历数组的过程中,从栈底到栈顶的下标对应的元素单调递减(非严格)。的时间,遍历两个数组寻找最短无序子数组的开始下标和结束下标需要。如果存在元素不同的下标,则最短无序子数组的下标范围是。如果不存在元素不同的下标,则最短无序子数组的长度是。原创 2024-07-18 18:00:00 · 831 阅读 · 0 评论 -
排序题目:相对名次
位运动员的相对名次,需要将运动员按照得分降序排序,排序的同时需要保留运动员的下标信息。遍历排序后的二维数组,得到每个名次对应的运动员在原始数组中的下标位置,将该名次对应的获奖情况填入结果数组中的相应下标位置。列,每一行分别记录每一位运动员的得分与该运动员在原始数组中的下标。对二维数组按照得分降序排序,排序后的二维数组中,第。位运动员在比赛中的得分。名的运动员在原始数组中的下标位置(的二维数组并排序,排序需要。的运动员得分最高,名次第。的时间,因此时间复杂度是。的时间,排序后遍历需要。位运动员的获奖情况。原创 2024-07-15 18:00:00 · 739 阅读 · 0 评论 -
排序题目:最小时间差
将分钟数组排序之后,最小时间差一定是数组中的两个相邻时间之差,或者数组的首元素与末元素之差加上。遍历排序后的分钟数组中的每一对相邻元素(包括首元素与末元素)计算时间差,即可得到最小时间差。首先将时间列表中的每个时间都转换成分钟数表示,得到分钟数组,则分钟数组的每个元素都在范围。的形式表示,返回列表中任意两个时间的最小时间差的分钟数表示。的递归调用栈空间,因此空间复杂度是。的分钟数组并排序,排序需要。的时间,排序后遍历数组需要。的分钟数组并排序,数组需要。小时制的时间列表,时间以。的时间,因此时间复杂度是。原创 2024-07-11 18:00:00 · 933 阅读 · 0 评论 -
排序题目:错误的集合
为了找到丢失的数字,可以使用哈希表记录数组中每个数字的出现次数,然后寻找重复的数字和丢失的数字。一次,每次会将一个元素交换到正确的下标位置,因此每个元素的访问次数是常数次,时间复杂度是。不幸的是,因为数据错误,集合中某一个数字复制成了集合中的另外一个数字,导致集合。重复的数字一定在数组中出现两次,因此遍历数组一定可以找到重复的数字。因此,遍历数组并计算每一对相邻元素之差,即可找到重复的数字和丢失的数字。升序排序,然后遍历数组寻找重复的数字和丢失的数字。时,遍历数组可以找到丢失的数字(包括丢失的数字是。原创 2024-07-08 18:00:00 · 785 阅读 · 0 评论 -
排序题目:三个数的最大乘积
根据上述分析可知,当乘积最大时,三个数的可能情况有两种,一是选数组中最大的三个数,二是选数组中最大的一个数与最小的两个数。如果数组中的所有元素都是负数,则任意三个数的乘积都是负数,为了使乘积最大应该使乘积的绝对值最小,数组中的最大三个数即为绝对值最小的三个数,乘积即为最大乘积。由于计算最大乘积只需要得到数组中最大的三个元素与最小的两个元素,并不需要得到所有元素的顺序,因此可以直接遍历数组找到最大的两个元素。如果数组中的所有元素都是非负数,则任意三个数的乘积都是非负数,数组中的最大三个数的乘积即为最大乘积。原创 2024-07-04 18:00:00 · 702 阅读 · 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 · 1238 阅读 · 0 评论 -
排序题目:找不同
多一个字母,其余字母都相同只是顺序可能不同,因此将两个字符串排序之后,除了多出的一个字母以外,两个有序字符串相同。中被添加的字母对应的 ASCII 码,根据该 ASCII 码即可得到被添加的字母。中被添加的字母对应的 ASCII 码,根据该 ASCII 码即可得到被添加的字母。中一定存在一个计数为负,该计数对应的字母即为被添加的字母。中的所有字母的 ASCII 码的按位异或的结果即为。中的出现次数,该字母即为被添加的字母,返回该字母。结束时没有遇到不同的字母,则被添加的字母是。原创 2024-06-27 18:00:00 · 726 阅读 · 0 评论 -
排序题目:丢失的数字
一次,每次会将一个元素交换到正确的下标位置,因此每个元素的访问次数是常数次,时间复杂度是。内的每个数字,如果遇到不在哈希集合中的数字,则该数字是丢失的数字,返回该数字。内,因此依次遍历该范围的数字,判断每个数字是否在哈希集合中。如果数组中没有数字丢失,则排序后的数组中,每个下标处的元素值都等于下标值。为了找到丢失的数字,可以使用哈希集合存储数组中的数字,然后寻找不在哈希集合中的数字。个整数中出现一次,因此每个未丢失的数字出现两次,丢失的数字出现一次。内的每个数字都在哈希集合中,则丢失的数字是。原创 2024-06-24 18:00:00 · 833 阅读 · 0 评论 -
排序题目:有序数组的平方
的过程中,每次遍历的元素都是尚未遍历的元素中的绝对值最大的元素,因此遍历元素的顺序是绝对值非递增顺序,即元素的平方非递增顺序。将遍历的元素的平方反向填入新数组,新数组中的元素顺序为非递减顺序。的所有元素都是非负数,元素顺序为绝对值非递减顺序,首个元素的绝对值最小,末尾元素的绝对值最大;的所有元素都是非正数,元素顺序为绝对值非递增顺序,首个元素的绝对值最大,末尾元素的绝对值最小;中的每个元素的平方并存入新数组中,然后对新数组按非递减顺序排序,即可得到排序后的新数组。中的每个元素的平方并存入新数组需要。原创 2024-06-20 18:00:00 · 1656 阅读 · 0 评论 -
排序题目:数组中两元素的最大乘积
由于计算最大乘积只需要得到数组中最大的两个元素,并不需要得到所有元素的顺序,因此可以直接遍历数组找到最大的两个元素。将数组升序排序之后,数组的末尾两个元素即为最大的两个元素,使用末尾两个元素计算乘积即为最大乘积。中的元素都是正整数,为了使得乘积最大,应该选择最大的两个元素。的值等于数组中最大的两个元素值,使用这两个值计算最大乘积。类型的最小值,确保初始值小于数组中的任意元素。的值等于已经遍历的元素中最大的两个元素。中至少有两个元素,因此一定存在两个不同的下标。,可以选择数组的两个不同下标。原创 2024-06-17 18:00:00 · 739 阅读 · 0 评论 -
排序题目:第三大的数
将数组中的元素全部加入哈希集合之后,新建一个数组存储哈希集合中的全部元素,然后对新数组排序,新数组的长度即为数组。如果当前元素不等于上一个遍历到的元素,则当前元素一定小于上一个遍历到的元素(由于数组已经有序),将不同元素个数加。解法一使用哈希集合确保相同的元素只计算一次,也可以直接对原数组排序和遍历,达到确保相同的元素只计算一次的目的。时,存在第三大的不同数,返回新数组中的第三大元素。位置的元素),则没有遇到新的不同元素,跳过当前元素。,则第三大的不同数不存在,返回排序后的数组的末尾元素。原创 2024-06-13 18:00:00 · 1120 阅读 · 0 评论 -
排序题目:有效的字母异位词
由于两个互为字母异位词的字符串包含的字符完全相同,只有顺序可能不同,因此将两个互为字母异位词的字符串排序之后,得到的有序字符串相同。对于进阶问题,如果输入字符串包含 Unicode 字符,则字符集不再局限于小写英语字母,因此不能使用数组维护计数,而是需要使用哈希表维护计数。字母异位词是将另一个单词或词组的字母重新排列之后得到的单词或词组,原始单词或词组中的每个字母恰好使用一次。类型的数组,然后对两个字符数组排序,比较排序后的两个字符数组是否相同。中的计数出现负数时,该计数对应的字符在。原创 2024-06-10 18:00:00 · 892 阅读 · 0 评论 -
排序题目:多数元素
摩尔投票算法由 Robert S. Boyer 和 J Strother Moore 提出,该算法的基本思想是:在每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。遍历数组,使用哈希表记录每个元素的出现次数,遍历结束之后即可得到数组中每个元素的出现次数。排序后的数组满足相等的元素一定出现在数组中的相邻位置,由于多数元素在数组中的出现次数大于。如果多数元素不是数组中的最小元素和最大元素,则排序后的数组的下标。个连续的元素都是多数元素,下标。原创 2024-06-06 18:00:00 · 1075 阅读 · 0 评论
分享