自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 收藏
  • 关注

原创 判断点在线的哪里?

求出直线ab的斜率k,假设存在点D=(m,n)在ab直线上,且D的y值等于c的y值,即n = ly。此时可以通过斜率算出m,比较m与lx的大小,如果m>lx说明点在线的左边,小于则在右边,等于则在线上。已知三个点,a = (px,py),b=(qx,qy),c = (lx,ly),求相对于由a和b两点确定的一条直线,点c位于左侧还右侧。if (tmpx > p.x)//当tmpx>p.x的时候,说明点在线的左边,小于在右边,等于则在线上。给定的条件:三个点(最原始的数据)原理:主要利用直线的斜率k。

2024-04-22 11:17:57 96

原创 Leetcode222.完全二叉树的节点个数

【代码】Leetcode222.完全二叉树的节点个数。

2023-11-30 21:38:22 376

原创 Leetcode111.二叉树的最小深度

这题和最大深度一样,直接后序遍历。但是需要注意的是,左子树或者右子树的为空的时候怎么办?那就直接取右子树或者左子树的结果,对为空进行条件判断。也可以精简代码,但是没必要。

2023-11-29 21:01:53 361

原创 Leetcode104.二叉树最大深度

是不是就是求根节点到叶子高度呢?最大深度,我第一时间想到层序遍历,遍历一层 ++计数器。所以这题求深度就该前序遍历是吧?深度:到 根结点 的距离--->前序遍历。高度:到 叶子结点 距离--->后序遍历。知识点:二叉树的 深度,高度。

2023-11-29 20:24:56 379

原创 Leetcode101.对称二叉树

这题其实就是判断二叉树是不是可以翻转,要是可以翻转并且翻转后和原来的树一样,就返回true,奈何代码没写出来。解法:二叉树后续遍历,传入左,右子树分别进行比较,分为内外侧分开比较。一定是先比较左右孩子结点。

2023-11-28 21:39:39 392

原创 Leetcode226.翻转二叉树

第一次想到的方法,二叉树层序遍历(迭代法),对每一个结点进行翻转。二叉树递归(前后序都行)

2023-11-28 20:30:49 317

原创 Leetcode107.二叉树层序遍历2

层序遍历结果直接翻转。

2023-11-27 20:20:45 436

原创 Leetcode102.二叉树的层序遍历

二叉树的前中后序遍历--对应图中的深度优先---递归/迭代->栈。二叉树的层序遍历--对应图中的广度优先---迭代->队列。

2023-11-27 20:12:30 302

原创 Leetcode94.二叉树的中序遍历 非递归

有点绕,还是用栈来实现。

2023-11-27 19:21:51 418

原创 Leetcode145.二叉树的后序遍历 非递归

紧张又刺激的智力题,换位置-翻转。

2023-11-27 16:47:36 352

原创 Leetcode144.二叉树前序遍历 迭代法

【代码】Leetcode144.二叉树前序遍历 迭代法。

2023-11-27 16:36:49 430

原创 Leetcode145.二叉树的后序遍历

【代码】Leetcode145.二叉树的后序遍历。

2023-11-25 21:14:37 351

原创 Leetcode94.二叉树中序遍历

【代码】Leetcode94.二叉树中序遍历。

2023-11-25 21:08:42 388

原创 Leetcode144.二叉树前序遍历

根左右---根就是对数据的处理。前中后就是根的位置不同。

2023-11-25 21:04:39 301

原创 Leetcode347.前k个高频元素

在c++中,堆的底层是用二叉树实现的,堆的有两种 大顶堆(根节点大于子节点),小顶堆(子节点大于根节点)。在c++中,堆实现的数据结构是 优先级队列。意思就是队列有优先级。priority_queue需要自定义排序大小。这个题目一看名字,马上反应过来要用堆的数据结构来解决。只要看到在大量数据中找频率,次数最多的前多少个元素,立马想到用堆。方法二:熟练运用stl。

2023-11-24 15:28:43 432

原创 Leetcode239.滑动窗口最大值

假装队列维护K个元素,其实呢,只需要维护队列出口的元素保持它永远是队列里面最大的元素就行,这就叫保持队列的单调性。这题挺难理解的,自己构建一个单调队列来操作维护入队的元素,始终保持单调。

2023-11-24 10:12:14 354

原创 Leetcode150.逆波兰表达式求值

逆波兰表达式就是 后缀表达式=====后序遍历---不考虑括号和优先级。先序遍历:先遍历根节点,再遍历左节点,最后遍历右节点;中序遍历:先遍历左节点,再遍历根节点,最后遍历右节点;后序遍历:先遍历左节点,再遍历右节点,最后遍历根节点;我们人类常用的就是中序遍历,需要考虑括号和优先级。这题就是后缀表达式,用栈实现。

2023-11-21 19:31:54 26

原创 Leetcode1047.删除字符串中的所有相邻重复项

用栈来做,首先对字符串进行遍历。若是栈为空或者栈顶元素不与其相等-->入栈。若是栈顶元素和字符串元素相等--->出栈。继续遍历,最后栈中元素即为剩下元素。

2023-11-21 17:14:00 16

原创 Leetcode20.有效的括号

还有就是弄清楚 有多少情况不满足匹配,方便写循环内条件!第一时间想到栈的运用。

2023-11-21 16:25:38 19

原创 Leetcode225.用队列实现栈

这个题有意思嗷,两个队列 q1,q2 q1始终表示对栈的存储 q2表示入栈数的中转。始终把q2当作中转站。和Leetcode232.用栈实现队列两个题一起思考。考察对栈和队列的熟悉程度。

2023-11-19 21:36:11 36

原创 Leetcode232.用栈实现队列

明白队列的性质,然后两个栈,第一个用来进行插入操作,第二个用来进行pop peek操作。条件就是当要进行pop和peek操作,判断第二个栈是不是空,如果是空,把第一个栈的元素移动到第二个里面去。注意:判空的操作要判断两个栈是不是都为空。因为是两个栈实现队列,所以考虑两个。

2023-11-19 21:01:07 29

原创 Leetcode459.重复的子字符串

第一个解法:把字符串s 直接拼接 ss = s + s 掐头去尾后 若是ss中find()到s证明有重复的子字符串。find()函数 查找到直接返回子字符串首次出现的位置(索引)。如果未找到子字符串,则返回。第二种:kmp的解法,返回字符串的前缀表。要是满足 前缀表的最后一个值(s串的最长相等前后缀长度) 满足 s.size%(s.size - next(n-1)) == 0;怎么证明这个等式我也不会。

2023-11-18 19:33:04 19

原创 Leetcode28.找出字符串中第一个匹配项的下标

细节就是 i表示后缀末尾位 j表示前缀末尾位置(最长前后缀相等长度)最重要就是:j = next[j-1] 表示若是不匹配返回最初相等串的下标位置。前缀串 后缀串 前缀表 最长相等前后缀串长度 --搞清楚概念。查询函数中 查询字符串要从0开始匹配 最后返回下标即可。表示 前缀表的值 是 j的值。传入needle查询的字符串构建next数组。然后就是while中表示回退的下标。一眼kmp---字符串匹配算法嗷。首先构建 next前缀表。

2023-11-18 16:59:27 24

原创 Leetcode151.反转字符串中的单词

这道题,要分开来看。第一步,去除多余的空格,方法和去除数组中的数字一样,双指针法。fast表示遍历找到新元素,slow表示新数组要插入元素的位置。对了,处理了后要对字符串resize(n)空间。

2023-11-16 21:30:15 14

原创 Leetcode541.翻转字符串

这题,最关键在于遍历。谁说遍历一定要++i------------>可以 i +=2*k。这样处理起来很方便,不用考虑太多条件。

2023-11-16 12:36:10 12

原创 Leetcode344.反转字符串

对于数组,字符串,链表-------------------->双指针的方法很重要。

2023-11-16 10:14:46 23

原创 Leetcode18.四数之和

梦第二次破碎,这道题不能用哈希。和三数之和一样,需要双指针方法,简单来说就是再三数之和外面再套一层循环,难就难在剪枝和去重,简直折磨,究极折磨。

2023-11-15 20:18:43 14

原创 Leetcode15.三数之和

这题主要在于去重的问题,用哈希太难掌握去重的条件了。建议使用双指针的方法来做,去重条件考虑起来就简单一些。

2023-11-15 19:07:59 10

原创 Leetcode1978.上级经理已离职的公司员工

新知识,子查询:可以查出表里所有的 employee_id当作一张新表,再用Employees表和新表进行镶嵌查询,只要manager_id不在新表的employee_id里即可。

2023-11-14 16:46:12 16

原创 Leetcode454.四数相加2

将a,b,c,d四个数组分成a+b 和 c+d两个模块。这样是不是很熟悉了?那就是plus版本的两数之和,不过要注意,现在map存储的是a+b出现的次数。这题首先得先想到用map,其次就是降低时间复杂度。

2023-11-14 16:18:59 20

原创 Leetcode1.两数之和

对于c++来说,返回类型是多个值,可以用{}来返回,就可以不用再开一个vector了。map到底存放什么?-----存放的是已经遍历过的元素,已经遍历过。有人相爱,有人看海,什么!还有人力扣第一题写不出来?

2023-11-14 12:52:20 14

原创 Leetcode349.两个数组的交集

只要看到有检查重复值,第一反应--------------------哈希(数组,set,map)自己写的数组法(看起来复杂,但是完全没用set和map)

2023-11-14 10:34:51 16

原创 Leetcode242.有效字母的异位词

哈希法:数组,set,map ----------总结:要是哈希值很大,数组不适用。

2023-11-13 12:33:57 24

原创 Leetcode142.环形链表

这题用快慢指针来做的话需要强大的数学推理能力。挺难的,不过对于有环的链表思路应该就是快慢指针。代码如下,数学推理省略。也不简单,要对哈希的容器很熟悉才行,比如说set自动排序,且不能有重复的。还有set的接口set.count()---0/1。其实还可以哈希的方法做,就比较简单了,但是时空复杂度是O(n),而双指针空间是O(1)。

2023-11-13 11:26:56 11

原创 Leetcode19.删除链表倒数第n个结点

还是一样,加一个虚拟头节点统一删除操作。还有就是找准删除结点的前面一个结点。这个题简单,可以遍历知道个数,再操作。不过我推荐双指针做法,看起来高级。

2023-11-12 20:59:45 48

原创 Leetcode610.判断三角形

学习了 case when -----------then a else b end 语句。

2023-11-11 21:32:58 22

原创 Leetcode24.两两交换链表中的结点

注意嗷,是交换节点,不是交换节点的值。所以嗷,应该是改变指针的方向,和leetcode翻转链表那个题目一样,改变指针指向。还有就是想清楚断掉指针的时候,考虑后续操作,有必要的时候需要创建新指针保存一下。最后,一般操作链表的题目,都是得先找到操作结点前面的值。所以,虚拟头节点很有必要!

2023-11-11 21:20:51 17

原创 Leetcode1789.员工的直属部门

用了union联合查询,将一个问题分成两个子问题。union联合查询会自动去除重复选项,如果想全部显示,使用 union all连接。

2023-11-10 21:23:15 25

原创 Leetcode206.反转链表

第一种想法,借用一个栈来解决。用栈存储数据,再拿出来赋值。第三种操作,递归写法(根据双指针写出来的)第二种操作,双指针+临时空间。

2023-11-10 19:39:14 15

原创 Leetcode707.设计链表

一般情况,对链表的操作都最好加一个虚拟头节点,这样对头插,头删除比较好操作。对于链表的增删都是从待操作结点的前面结点发起的动作。

2023-11-10 18:44:34 14

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除