![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leetcode
hanjialeOK
世上无难事,只怕有心人!
展开
-
[leetcode] 质因数分解
第一次参加周赛,遇到了质因数分解…原创 2023-03-06 11:42:32 · 600 阅读 · 0 评论 -
[C++] 二分查找 lower_bound() 与 upper_bound()
当有序数组中有多个重复元素时,二分查找就出现了 lower_bound 和 upper_bound,这两个函数都可以直接调用。自己实现 lower_bound 和 upper_bound。二分查找,非常适合在有序数组中进行查找,时间复杂度为。原创 2023-02-07 21:37:39 · 260 阅读 · 0 评论 -
[C++] 字符串 string
string 转 int,long,long long。string 删除所有空格。int 转 string。原创 2023-02-07 12:04:40 · 164 阅读 · 0 评论 -
[C++] 数据结构 priority_queue
如果存储的是 pair 类型,默认会使用 pair 中的第一个元素进行比较,第一个元素相等你则会比较第二个。优先队列(priority_queue)其实就是堆,默认是大顶堆,即 top() 会返回堆顶元素(最大)。如果想要自定义比较函数,比较麻烦…原创 2023-02-06 11:41:52 · 520 阅读 · 0 评论 -
[leetcode 215] 数组中的第K个最大元素
快排每次 partition 过程一定会确定 pivot 的位置,我们根据 k 的值对其中一侧继续 partition 直到 pivot = k。内存无法存放,那就不能用排序(涉及到内存和外存的交换,速度会很慢)。最差情况是数组已有序,每次 pivot 都在数组末尾,而 k 在另一侧,时间复杂度为。时间内维护好,通过 pop 可以删除最大值或者最小值,通过 top 可以查看其最值。优先队列内的元素是有序的,push 新元素后,可以在。理想情况,假设每次 pivot 都在中间位置,那么时间复杂度为。原创 2023-02-04 09:22:08 · 536 阅读 · 0 评论 -
[leetcode 450] 删除二叉搜索树中的节点
题目: https://leetcode.cn/problems/delete-node-in-a-bst/description/先找到该结点,然后删除,分为两种情况递归写法迭代原创 2023-01-23 11:25:24 · 97 阅读 · 0 评论 -
[leetcode 516] 最长回文子序列
确定了 dp[i][j] 的定义后,在二维表格中可以表示下图,i 递减,j 递加,只在上半区进行遍历(在下半区也是可以的,只不过遍历顺序要调整,dp[i][j]的意义刚好反过来)。首先定义 dp[i][j] 的意义,dp[i][j] 表示以 [i, j] 内的字符的最长回文序列长度,然后 i 和 j 分别减小和增加,从而向两边扩散。注意,在对角线上,单个字母一定是长度为1的回文序列。原创 2023-01-19 23:08:03 · 105 阅读 · 0 评论 -
[leetcode 72] 编辑距离
时,dp[i-1][j-1] 已经表示 hor 变成 ro 的最少操作数目,因此 dp[i][j] 无需增加。空字符串变为空字符串无需操作,horse 变为空字符串需要删除5次,空字符串变为 ros 需要插入3次。这题应该是字符串dp的终极形态了吧🤣,不看答案完全不会…看了答案发现原来还是dp…熟记 dp[i][j] 的含义,上面的就很好理解了。,我们可以做3种操作:插入,删除,替换。使用 dp[i][j]下面就是初始化的问题。原创 2023-01-19 15:51:23 · 1426 阅读 · 0 评论 -
[leetcode 1723] 完成所有工作的最短时间
感觉和 [leetcode 198] 划分为k个相等的子集 有点相似,这题更像是划分为k个。原创 2023-01-19 13:37:07 · 1583 阅读 · 0 评论 -
[leetcode 98] 验证二叉搜索树
一种方法是中序遍历,问题是如果全部遍历,存储在数组里,那样太慢了。我想发现第一个不符合的节点后立马返回,这样就需要一个值存储 last 节点的值,本题的树节点范围是。,如果 last 一开始为 INT_MIN 会有问题,所以使用了 long,注意,last 我使用了地址传参,这样可以再递归中改变 last 的值。第一次做一维很简单,只考虑判断每次递归时 root 与 左右子树的比较,这样显然不对。原创 2023-01-09 17:45:11 · 85 阅读 · 0 评论 -
[leetcode 101] 对称二叉树
看到题目,一开始感觉没法用递归,因为传统二叉树递归的参数只有一个root,显然没法解决对称的问题。于是想到中序遍历(左中右),因为是对称的,所以中序遍历的结果一定是回文序列,通过这个来判断是否对称。然而,虽然对称二叉树一定是回文序列,但回文序列不一定是对称二叉树。递归,还是得递归,把参数由 root 改为 left 和 right 不就行了嘛!两个参数分别表示两棵树,一个往左,一个往右。能不能使用迭代解决呢?使用两个队列,left 和 right 各一个。原创 2023-01-09 16:06:36 · 90 阅读 · 0 评论 -
[leetcode 113] 路径总和 II
下面的代码不使用地址传参,而是复制传参,这样就不需要 pop_back 操作了,同样可以ac,但是。这道题目是二叉树的经典回溯题目。思考:如果仅要求找到任意一条符合条件的路径,这样如何。原创 2023-01-08 13:57:23 · 64 阅读 · 0 评论 -
[C++] vector 用法
leetcode 上刷题的时候,vector 是最常用的容器,记录一下用法。vector 完全可以当作栈来使用,push_back 与 pop_back。因此,remove 需要搭配 erase 才能完全删除元素。原创 2023-01-06 14:57:20 · 454 阅读 · 0 评论 -
[leetcode 946] 验证栈序列
非常经典的栈题目,考研中经常出现。思想就是模拟栈,下面是我第二次写这道题时的代码。原创 2023-01-03 19:08:18 · 67 阅读 · 0 评论 -
[leetcode 224] 基本计算器
非常经典的题目,一定一定要熟记!原创 2023-01-03 14:59:58 · 224 阅读 · 0 评论 -
[leetcode] unordered_map 与 unordered_set
leetcode刷题的时候,常用的容器便是 unordered_set 与 unordered_set。这里记一下用法。原创 2023-01-02 21:55:00 · 123 阅读 · 0 评论 -
[leetcode 425] 用最少数量的箭引爆气球
这里我是以第一个元素排序(sort默认排序方式)。我们维护一个当前重叠区间的右侧最小值min_end,当这个下一个区间的左侧值大于该值时,需要一支箭把重叠的cnt个气球引爆,然后cnt变为1。注意,cnt初始值为1,min_end初始值为points[0][1]。非常奇怪的一个细节是,如果我在sort中使用自己的comp函数,会超时😢,不知道为什么。官方题解中,通过第二个值及进行排序,更容易理解!这样做就不需要min操作了。啊啊啊终于开始贪心了,最害怕这种题目了😨!这样就省的复制了,更快!原创 2022-12-31 17:35:44 · 61 阅读 · 0 评论 -
[leetcode 11] 盛最多水的容器
经典不看答案不会写系列。原创 2022-12-31 14:16:18 · 77 阅读 · 0 评论 -
[面试题 16.16] 部分排序
然后我就傻傻的按照这个写,嵌套for循环,第一个for循环确定m,第二个for循环找m之后的最大值,然后超时了哈哈🤣。啊呀,我也看出来规律了。原创 2022-12-31 11:04:52 · 84 阅读 · 0 评论 -
[leetcode 977] 有序数组的平方
仔细观察,发现:小于零的部分平方后是降序,大于零的部分平方后是升序,找到分界点然后归并排序!值得注意的是,如果数组中全部是正数或者全部是负数,那么分界点应该如何确定?这道题目,直接排序就可以哈哈,不过时间复杂度会超过。原创 2022-12-24 15:47:05 · 73 阅读 · 0 评论 -
[leetcode 23] 合并K个升序链表
但是更好的方法是归并,让链表先两两合并,最后合并两个链表。这道题让我意思到归并排序中的边界条件的重要性!只有当输入的数组为空时,start 才会小于 end,否则 start >= end,在其他的一些题目中,我没有意识到这个问题的重要性,但此题中必须要考虑。我建议在调用递归函数前处理数组是否为空的情况。最容易想到的方法是:先创建一个哨兵结点,使用 for 循环一个一个合并数组中的所有链表。原创 2022-12-23 22:22:12 · 106 阅读 · 0 评论 -
[leetcode 1] 两数之和
收到上一题的影响,我第一反应是双指针:先把数组排序,首位两个指针分别记为 low 和 high,判断 nums[low]+nums[high] 和 target 的大小,根据情况移动 low 或者 high。😢,其实也行,就是排序的时候不是原数组,二是下标。官方的解答,使用哈希表,非常精妙!但是万万没想到,题目要求输出的是。原创 2022-12-23 20:36:10 · 73 阅读 · 0 评论 -
[leetcode 315] 计算右侧小于当前元素的个数
暴力 for 循环肯定会超时。,但是这样依旧超时😨。原创 2022-12-21 21:38:40 · 138 阅读 · 0 评论 -
[剑指 offer 51] 数组中的逆序对
注意看,当 12 大于 9 时,那么 12 之后的所有数目肯定也大于 9,即有 4 个逆序对,100 大于 26 时,有一个逆序对…第一种标准解法是归并排序。题目看起来很简单,但是 for 循环会超时。为什么归并排序可以起到作用呢?原创 2022-12-21 16:35:19 · 90 阅读 · 0 评论 -
[leetcode 75] 颜色分类
看到题解才知道原来交换位置就行。比如第一次遍历把0交换到最前面,第二次遍历把1交换到0的后面。第一想法是统计数目,根据数目对原数组进行复制。,也就是必须要把原数组复制一遍。原创 2022-12-21 11:58:46 · 66 阅读 · 0 评论 -
[leetcode 88] 合并两个有序数组
看了官方题解后,原来可以逆序遍历,因为 nums1 本身就有多余的 n 个空间,所以逆序遍历,挑选。这个题目不难,双指针法比较元素,时间复杂度。,缺点是需要额外的空间复杂度。这样空间复杂度变成了。放在 nums1 的。原创 2022-12-19 14:44:56 · 75 阅读 · 0 评论 -
[leetcode 641] 设计循环双端队列
队列经典题目,考察各种空满条件。原创 2022-12-18 20:03:26 · 74 阅读 · 0 评论 -
[leetcode 239] 滑动窗口最大值
困扰我的就是如何出栈,因为每次总有一个值离开滑动窗口,方法是把这个值和 front 进行比较,相等则出栈。一开始完全不会,看了题解才写出来。我认为难点在于应到了 deque(双向队列)。出口 1 3 -1 入口。,和单调栈十分相像。原创 2022-12-18 17:15:40 · 63 阅读 · 0 评论 -
[leetcode 739] 每日温度
我的解法有点傻,还特意建了一个结构体,其实完全没必要,栈内只需要存储下标就好了,对应的温度可以直接通过数组索引。第一个想法是简单两个 for 循环,但是可能会超时(其实用C++不会超时)。(原来叫作最小栈啊~),时间复杂度为。因为最近在做栈的题目,所以想到了。原创 2022-12-18 13:31:42 · 312 阅读 · 0 评论 -
[leetcode 155] 最小栈
通过上面两步,栈顶diff若小于零,min即为top,反之,min+diff=top。第二种方法不占用额外空间,栈中信息使用。,同时维护一个最小值min。因为引入了减法,32位int可能会溢出。注意代码里使用了long,这是因为。解法有两种,第一种是。,需要占用额外空间。原创 2022-12-18 11:12:00 · 76 阅读 · 0 评论