
【排序类】
文章平均质量分 68
LeetCode刷题排序类
Ring*
本科学硬件,研究生学软件!
展开
-
【LeetCode-147】对链表进行插入排序
下面是插入排序算法的一个图形示例。部分排序的列表(黑色)最初只包含列表中的第一个元素。每次迭代时,从输入数据中删除一个元素(红色),并就地插入已排序的列表中。给定单个链表的头 head ,使用 插入排序 对链表进行排序,并返回 排序后链表的头。对链表进行插入排序。...原创 2022-08-08 11:53:10 · 121 阅读 · 0 评论 -
【LeetCode-75】 颜色分类
给定一个包含红色、白色和蓝色、共 n 个元素的数组 nums ,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。必须在不使用库的sort函数的情况下解决这个问题。...原创 2022-08-08 11:49:37 · 302 阅读 · 0 评论 -
【LeetCode-56】合并区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。如果我们按照区间的左端点排序,那么在排完序的列表中,可以合并的区间一定是连续的。首先,我们将列表中的区间按照左端点升序排序。我们用数组 merged 存储最终的答案。...原创 2022-08-08 11:47:33 · 247 阅读 · 0 评论 -
【LeetCode-49】字母异位词分组
两个字符串互为字母异位词,当且仅当两个字符串包含的字母相同。同一组字母异位词中的字符串具备相同点,可以使用相同点作为一组字母异位词的标志,使用哈希表存储每一组字母异位词,哈希表的键为一组字母异位词的标志,哈希表的值为一组字母异位词列表。遍历每个字符串,对于每个字符串,得到该字符串所在的一组字母异位词的标志,将当前字符串加入该组字母异位词的列表中。遍历全部字符串之后,哈希表中的每个键值对即为一组字母异位词。以下的两种方法分别使用排序和计数作为哈希表的键。...原创 2022-08-08 11:43:53 · 354 阅读 · 0 评论 -
【LeetCod】三数之和-15
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。原创 2022-08-08 11:37:13 · 146 阅读 · 0 评论 -
【LeetCode-455】方法饼干
对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s[j]。如果 s[j] >=g[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。...原创 2022-08-08 11:34:54 · 229 阅读 · 0 评论 -
【LeetCode-414】第三大的数
具体做法是每遍历一个数,就将其插入有序集合,若有序集合的大小超过 3,就删除集合中的最小元素。这样可以保证有序集合的大小至多为 3,且遍历结束后,若有序集合的大小为 3,其最小值就是数组中第三大的数;另一种不依赖元素范围的做法是,将 aa、bb 和 cc 初始化为空指针或空对象,视作「无穷小」,并在比较大小前先判断是否为空指针或空对象。遍历结束后,若 cc 为空,则说明第三大的数不存在,返回 aa,否则返回 cc。如果能找到三个不同的元素,就返回第三大的元素,否则返回最大的元素。...原创 2022-08-08 11:32:32 · 562 阅读 · 0 评论 -
【LeetCode-389】找不同
首先遍历字符串 s,对其中的每个字符都将计数值加 1;然后遍历字符串 t,对其中的每个字符都将计数值减 1。当发现某个字符计数值为负数时,说明该字符在字符串 t 中出现的次数大于在字符串 s 中出现的次数,因此该字符为被添加的字符。如果将两个字符串拼接成一个字符串,则问题转换成求字符串中出现奇数次的字符。将字符串 s 中每个字符的 ASCII 码的值求和,得到。随机重排,然后在随机位置添加一个字母。」,我们使用位运算的技巧解决本题。对字符串 t 同样的方法得到。,它们只包含小写字母。即代表了被添加的字符。.原创 2022-08-08 11:26:30 · 85 阅读 · 0 评论 -
【LeetCode-350】两个数组的交集II
每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,将该数字添加到答案,并将两个指针都右移一位。可以不考虑输出结果的顺序。首先遍历第一个数组,并在哈希表中记录第一个数组中的每个数字以及对应出现的次数,然后遍历第二个数组,对于第二个数组中的每个数字,如果在哈希表中存在这个数字,则将该数字添加到答案,并减少哈希表中该数字出现的次数。为了降低空间复杂度,首先遍历较短的数组并在哈希表中记录每个数字以及对应出现的次数,然后遍历较长的数组得到交集。...原创 2022-08-07 16:25:50 · 202 阅读 · 0 评论 -
【LeetCode-349】两个数组的交集
假设数组 nums1 和 nums2 的长度分别是 m 和 n,则遍历数组 nums1 需要 O(m) 的时间,判断 nums1 中的每个元素是否在数组 nums2 中需要 O(n) 的时间,因此总时间复杂度是 O(mn)。每次比较两个指针指向的两个数组中的数字,如果两个数字不相等,则将指向较小数字的指针右移一位,如果两个数字相等,且该数字不等于 pre ,将该数字添加到答案并更新 pre 变量,同时将两个指针都右移一位。如果两个数组是有序的,则可以使用双指针的方法得到两个数组的交集。...原创 2022-08-07 16:23:40 · 145 阅读 · 0 评论 -
【LeetCode-268】丢失的数字
首先遍历数组 nums,将数组中的每个元素加入哈希集合,然后依次检查从 0 到 n 的每个整数是否在哈希集合中,不在哈希集合中的数字即为丢失的数字。由于哈希集合的每次添加元素和查找元素的时间复杂度都是 O(1),因此总时间复杂度是 O(n)。遍历数组 nums 将元素加入哈希集合的时间复杂度是 O(n),遍历从 0 到 n 的每个整数并判断是否在哈希集合中的时间复杂度也是 O(n)。排序的时间复杂度是 O(nlogn),遍历数组寻找丢失的数字的时间复杂度是 O(n),因此总时间复杂度是 O(nlogn)。.原创 2022-08-07 16:20:05 · 611 阅读 · 0 评论 -
【LeetCode-242】有效的字母异位词
由于字符串只包含 26 个小写字母,因此我们可以维护一个长度为 26 的频次数组 table,先遍历记录字符串 s 中字符出现的频次,然后遍历字符串 t,减去 table 中对应的频次,如果出现 table[i]原创 2022-08-07 16:17:41 · 80 阅读 · 0 评论 -
【LeetCode-217】 存在重复元素
给你一个整数数组 。如果任一值在数组中出现 至少两次 ,返回 ;如果数组中每个元素互不相同,返回 。在对数字从小到大排序之后,数组的重复元素一定出现在相邻位置中。因此,我们可以扫描已排序的数组,每次判断相邻的两个元素是否相等,如果相等则说明存在重复的元素。复杂度分析时间复杂度:O(NlogN)O(N\log N)O(NlogN),其中 N 为数组的长度。需要对数组进行排序。空间复杂度:O(logN)O(\log N)O(logN),其中 N 为数组的长度。注意我们在这里应当考虑递归调用栈的深度原创 2022-08-07 16:14:32 · 82 阅读 · 0 评论 -
【LeetCode-169】多数元素
我们同样也可以在遍历数组 nums 时候使用打擂台的方法,维护最大的值,这样省去了最后对哈希映射的遍历。对于每种情况,数组下面的线表示如果众数是数组中的最小值时覆盖的下标,数组下面的线表示如果众数是数组中的最大值时覆盖的下标。因为超过$\lfloor \dfrac{n}{2} \rfloor $的数组下标被众数占据了,这样我们随机挑选一个下标对应的元素并验证,有很大的概率能找到众数。由于一个给定的下标对应的数字很有可能是众数,我们随机挑选一个下标,检查它是否是众数,如果是就返回,否则继续随机挑选。...原创 2022-08-07 16:12:12 · 145 阅读 · 0 评论 -
【LeetCode-88】合并两个有序数组
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。这一方法将两个数组看作队列,每次从两个数组头部取出比较小的数字放到结果中。最直观的方法是先将数组 nums2 放进数组 nums1 的尾部,然后直接对整个数组进行排序。,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。**进阶:**你可以设计实现一个时间复杂度为。的算法解决此问题吗?.原创 2022-08-07 16:08:08 · 533 阅读 · 0 评论