![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
文章平均质量分 72
不见风月
这个作者很懒,什么都没留下…
展开
-
[230603 lc621] 任务调度器
so sad,今天状态很不好,这道题看了一下午加一晚上,屏幕上的字它不进脑子啊!还是深夜效率高!君独何为至于此,山非山兮水非水。原创 2023-06-04 06:30:00 · 95 阅读 · 0 评论 -
[230601 lc295] 数据流的中位数
我们使用大顶堆和小顶堆的数据结构,把所有数据看成一个有序数组,左半部分存放在大顶堆中,右半部分存放在小顶堆中,并维护大顶堆的大小始终与小顶堆的大小相等,或者大顶堆的大小比小顶堆的大小大 1。在这样的情况下,如果数组大小为奇数,那么大顶堆的堆顶元素就是中位数;如果数组大小为偶数,那么大顶堆的堆顶元素和小顶堆的堆顶元素的均值就是中位数。是有序整数列表中的中间值。如果列表的大小是偶数,则没有中间值,中位数是两个中间值的平均值。在,当向数据结构中加入元素的时候,该怎么加。理解了大顶堆、小顶堆以后代码真的很好写。原创 2023-06-01 21:00:00 · 90 阅读 · 0 评论 -
[230531 lc23] 合并 K 个升序链表
利用一个小顶堆,把数组中每一个链表的头节点都放入堆中,逐个弹出,弹出后,把该节点加入到结果链表,如果节点有下一个节点,就把下一个节点继续放入堆中,堆内会进行自动调整。负责把一个 list 数组中的链表两两合并,将数组规模缩减至原数组的一半,递归地调用外层递归函数,直至数组地大小为 1。关键点应该在需要定义一个虚拟头节点,固定好头节点,方便返回。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。负责把给定的两个链表合并成一个链表。原创 2023-05-31 22:00:00 · 39 阅读 · 0 评论 -
[230529 lc215] 数组中的第K个最大元素
快速排序的实现:传入一个乱序数组,选中最右边的元素为主元,在剩余元素中使用双指针的做法,i 指针扫过的值均为小于主元的值,当 j 指针遍历完剩余元素后,交换 i 位置和主元位置上的元素,此时 pivot 就位,然后递归地调用 quickSort 函数对左右两边的子数组进行快排。堆排序的思路:先把原数组初始化为一个大顶堆,此时数组中第一个元素即最大元素,然后交换最大元素和最后一个元素的位置,接着调整前 size - 1 个元素为大顶堆,找到第二大的元素,交换位置。请注意,你需要找的是数组排序后的第。原创 2023-05-30 02:00:00 · 43 阅读 · 0 评论 -
[230527 lc84] 柱状图中最大的矩形
一道很典型的单调栈的题目。思路是利用单调栈找到每一个高度左边的第一个较小高度和右边的第一个较小高度,记录其下标,根据下标计算出对应高度所能达到的最大宽度,计算其面积。对于单调栈来说,理解到找较小元素应该使用递增单调栈、找较大元素应该使用递减单调栈即可。找当前元素左边的第一个元素,使用倒序遍历。左边元素数组应该初始化为 -1,右边元素数组应该初始化为 size。:求出以矩阵的每一行为底对应的柱状图,然后求每一个柱状图中的最大矩形面积,从中取最大值。求在该柱状图中,能够勾勒出来的矩形的最大面积。原创 2023-05-27 22:00:00 · 32 阅读 · 0 评论 -
[230526 lc42] 接雨水
维护一个非严格单调递减的单调栈,为了保证数组中的每一个元素都合法地入栈,要用一个循环去 pop 出比当前元素小的元素,并且在弹出的时候,对这个面积进行计算。我们可以把要求的雨水面积划分为一个一个小矩形,每个小矩形的底都是一,高度取每个高度左边的最大高度和右边的最大高度的最小值,减去当前的这个高度。我们需要从左到右遍历数组,找到左边的最大高度;从右到左遍历数组,找到右边的最大数组。使用单调栈来解题,关键点在确定小矩形的长和宽。的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。原创 2023-05-27 06:00:00 · 40 阅读 · 0 评论 -
[230524 剑指59] 队列的最大值
C++ 中的队列 queue 和 deque 本身提供的 push 和 back 都是 O(1) 时间复杂度的。deque 是双端的,可以从队尾加入和弹出元素、从队首加入和弹出元素,对应接口分别是 push_back 和 pop_back、push_front 和 pop_front。queue 是单向的,从队尾加入元素、从队首弹出元素,使用的接口分别是 push 和 pop。我们可以使用一个辅助的数据结构:单调队列,队列的队头元素,就是当前队列中的最大值。时间复杂度都是O(1)。原创 2023-05-25 02:00:00 · 35 阅读 · 0 评论 -
[230523 剑指51] 数组中的逆序对
整体思路是使用归并排序的算法。在归并排序的合并过程中,若右边子数组指针指向的元素小于左边子数组指针指向的元素,则意味着出现了逆序对,逆序对数量为左子数组中未合并的元素数量。在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。别的就不说了,就是觉得这个归并排序里面的 tmp 数组引用传参写得非常妙啊!重复使用,节约空间,good.易错点在合并过程中 if 分支需要先判断下标合法性以防止越界。重难点在递归实现归并排序。原创 2023-05-24 05:00:00 · 28 阅读 · 0 评论 -
[230522 剑指49] 丑数
但是因为前面的数乘以 5 的值可能会大于后面的数乘以 2 或 3 的值,所以我们不能单纯地按顺序记录丑数序列中每一个数乘2、乘3、乘5的结果。**(确定解法)从后往前看:**因为丑数只包含质因子2、3、5,所以每一个丑数都是由在它之前的丑数序列中的某一个数乘 2、乘 3 或乘 5 得到的,于是我们可以想到动态规划的解法。在构造丑数序列时,选取下标为 a 的丑数乘 2 的结果、下标为 b 的丑数乘 3 的结果、下标为 c 的丑数乘 5 的结果中的最小值,先加入到丑数序列中,然后对应的下标递增。原创 2023-05-22 23:00:00 · 35 阅读 · 0 评论 -
[230521 剑指44] 数字序列中某一位的数字
数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。**易错点在:**int 类型的 count 会发生上溢,应把 count 定义为 long long 类型。**重难点在:**在第 2、3 步中,理解到在第 1 步的迭代结束后,n 为新的 n(可以理解为新的下标)请写一个函数,求任意第n位对应的数字。没有,能把这题找规律写出来就不错了。则第 2 步的计算公式为。第 3 步的计算公式为。原创 2023-05-21 17:00:00 · 46 阅读 · 1 评论 -
[230520 剑指43] 1~n整数中1出现的次数
在当 n 为 INT32_MAX 时,digit 会溢出,故需要把 digit 定义为 long 变量。例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。在理解到固定当前位数字为 1 时,找到的最大的数是当前位为 1 且不超过 n 的最大的数。我们需要维护几个变量:high、low、cur、digit。,求1~n这n个整数的十进制表示中1出现的次数。并且要知道最小的数、最大的数和计算个数的关系,例如。当分析完当前位以后,迭代几个变量。遍历肯定是超时的,所以我们采用。原创 2023-05-21 06:00:00 · 54 阅读 · 0 评论 -
[230516 剑指38] 字符串的排列
求一个字符串的全排列,本质上就是穷举。我们可以把这个问题看作“有 n 个空位,我们使用给定的 n 个字符从左往右填满这 n 个空位,并且每个字符不能重复使用”。在回溯函数内部,遍历 n 个字符,尝试将某一字符放入该空位,然后进行下一次递归调用,对下一个空位进行相同的操作。下一个排列:已知当前的一个排列,快速得到字典序中下一个更大的排列。你可以以任意顺序返回这个字符串数组,但里面不能有重复元素。在写代码的过程中描述每一个变量、每一个参数的意思。输入一个字符串,打印出该字符串中字符的所有排列。原创 2023-05-16 16:00:00 · 45 阅读 · 1 评论 -
[230515 剑指37] 序列化二叉树
这里不限定你的序列 / 反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。istringstream 可以将一个字符串与一个流相关联,从而以流的方式对字符串进行提取,这个特性使 istringstream 在分析输入时非常有用。这道题的难点在建树时需要对字符串进行切割,我们可以利用 C++ 中的 isstringstream 的优势很好地解决这一点。这题分为两个部分:把给定的二叉树序列化,和根据给定的序列还原二叉树。原创 2023-05-16 14:00:00 · 37 阅读 · 0 评论 -
[230420 leetcode15] 三数之和
要找三元组,最原始最暴力的方法就是三层遍历,时间复杂度 O(n^3)。但就像双指针可以把二维遍历降为一维遍历一样,使用双指针也可以把三维遍历降为二维的。**剪枝逻辑:**核心算法前对数组进行排序,若三元组第三位(即 k 位)元素大于 0,则可跳出当前双指针循环。注意:答案中不可以包含重复的三元组。k 位去重(k 是从右向左移动的)在尝试优化时浅浅使用了一下。,判断是否存在三元组。原创 2023-04-21 22:00:00 · 273 阅读 · 1 评论 -
[230115 | 第328场周赛] 前缀和与差分 | 滑动窗口 | 树形DP
[230115 | 第328场周赛] 前缀和与差分 | 滑动窗口 | 树形DP原创 2023-01-17 16:34:54 · 105 阅读 · 0 评论