自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 问答 (1)
  • 收藏
  • 关注

原创 哈希表之四数相加Ⅱ

首先先模仿两数之和中的第一个数加到哈希表中,那这里的就是将其中的两个数组的和加到哈希表中,两个数组中元素之间的和只能通过双重for循环计算出来,所以先计算和然后加到哈希表中,注意,两个数组元素的和是有可能重复的,对于重复的值它们取的位置都是各自数组上的,所以这里的索引不会重复,即使数值一样,但是也是不同数组中的索引,同一个数组中的同一个索引上的值那才是重复。我们能想到一种很直接的做法,使用暴力的方式:四重for循环依次遍历四个数组然后进行求解,这种做法的时间复杂度为O(

2025-11-24 23:21:18 289

原创 判断快乐数

类似于这样的形式叫做无限循环,那通过这个例子其实可以抓住一点,第一次循环中出现的数字在第二轮循环中又出现,如果说在计算过程中有这样的现象发生的话,那么可以直接返回false。在判断是否在哈希表之前需要先判断这个值是不是1,如果是1的话,那就返回true,无论是不是循环,只要见到1就直接返回true即可,因为这种情况是题目所需要的。哈希法的目的就是为了保存计算过的值,以供未来计算到一个新的值的时候从set中进行查找,如果不为1还在集合中那么说明已经开始进入循环了,这个时候就要返回false。

2025-11-20 13:08:36 165

原创 两个数组的交集

本题给定的是两个数组,然后将这两个数组中的交集元素全部取出来返回,交集就是就是两个数组中都存在且相等的元素。那看两个数组中的元素是否有相等的元素,最直接的做法就是暴力,使用双层for循环遍历两个数组,逐一进行比较,相等的话就加到结果集中。这种数据结构,因为我们求的是交集,那对于给定数组中如果出现重复的元素其实只需要保留一份就好,就拿这一份去和另一个数组进行比较就好,那要想对一个数组中的元素进行去重的话,其实就是将这些元素填充成一个unordered_set对象即可。该做法时间复杂度极端情况可达到O(

2025-11-17 23:22:39 306

原创 有效的字母异位词

如果说我们固定了’a’的位置,剩下的25个字母的位置都可以固定了,所以就让字母’a’在index=0的位置上,其他的依次往后排就可以了,那字符ch对应的下标是多少呢,通过第一个放’a’可以发现,对于一个字符ch来说,从题目的说明其实可以得到一点,在变换前后,两个字符串中对应的每个字符的个数一定是一样的,那其实只要先计算出一个字符串中的每个字符的个数,然后再计算另一个字符串中每个字符的个数,只要对应字符的个数相等那么就可以返回true了。就是ch字符对应的位置。通过前面的分析我们就可以写出下面的代码。

2025-11-16 23:02:43 251

原创 二叉树的左叶子之和

递归法的思路:在本题中我们要找的是根节点的左子树上的左叶子节点与右子树上的左叶子节点两者之和,所以对于根节点上来说,肯定是要把每棵子树上的左叶子之和计算出来,那么根节点的就是左子树上的加上右子树上的,所以我们要按照后序遍历的方式来进行递归遍历树,先求子树上的,子树上的求完了,那结果就是两者相加。,不止是处理二叉树,对于多叉树的处理同样也是有着递归的思想。,所以我们只需要遍历整棵树,我们要求的是根节点左子树的左叶子和根节点右子树上的左叶子两者之和,所以本题使用递归的话需要讲究一下顺序。

2025-11-14 00:00:00 448

原创 删除链表的倒数第n个节点

其实这是物理当中的一个相对运动的过程,当甲乙以相同的速度跑时,甲和乙之间的相对距离是不变的,一直是200米,那很显然,当甲跑到终点的时候乙处于离终点200米处的位置(也就是倒数200米的位置),通过这个例子再来看这个题就好理解多了。甲乙两个人参与校园跑步,首先甲跑了200米,甲在跑这200米的过程中,乙一直站在起点没动,当甲到达200米的位置时,这个时候乙动身了,他从起点开始与甲相同的速度开始跑,当甲达到终点时,请问乙在什么位置?题目给定的是一个单链表,然后要求以一趟遍历的代价将倒数第n个节点删掉。

2025-11-10 22:55:16 686

原创 两两交换链表中的节点

本题说到底就是一个修改链表next指针域的一个操作,对于两个节点来说,只需要按照相应的步骤将节点的指针域给修改就可以了。本题给定的是一个单链表,题目要求是将链表中的节点两两交换,注意:交换指的是修改链表中每个节点的指针并不是修改每个节点中的val值,要实实在在的修改链表本身。例如1->2->3->4->5,修改后会变成2->1->4->3->5。至此,两个节点之间的next指针域就修改完了,那我们在修改的过程中要保证一个点:那就是当前"虚拟头节点"后面的两个节点都要存在,这样才能进行 修改next指针域。

2025-11-09 22:20:20 305

原创 反转单链表

首先看一下递归解法,为什么会想到递归呢,因为我们反转链表实际操作的对象是链表中的每个节点,在说明中也说了,反转链表就是修改一个一个的节点的指针,可以看出这做的是同一件事情,而且前面节点的反转会影响后面节点的反转,因为只有前面节点被反转过来了,后面节点也才能被反转,所以使用递归法来解决。,但是因为这里是单链表,所以说我直接修改这个链表的指针会让这个单链表断裂,链表都断裂了还何谈翻转呢,所以我们需要额外的指针来保存当前修改节点的后继节点的地址,然后再去修改当前节点的指针。这一点在二叉树、回溯算法中很重要。

2025-11-06 23:36:30 241

原创 螺旋矩阵Ⅱ

例如:左闭右开,左闭右闭,左开右闭这种的就是循环不变量,我们在循环的时候始终保持这样的一个原则来进行遍历即可。在这里我们是按顺时针方向进行遍历的,一圈下来会遍历四条边,所以也就对应着四个循环不变量的准则,分别是:左闭右开,上闭下开,右闭左开,下闭上开,按照这样顺时针的顺序就可以将每个元素都遍历到,然后填充我们的数据就可以了。个数字全部填充进去,题目已经告诉我们解决方法了,其实就是模拟法,按照顺时针的顺序遍历这个二维数组,然后一个一个往里面填充就好了。本题给定的是一个整数n,然后生成了1~n。

2025-11-05 23:13:24 300

原创 有序数组的平方

本题给定的是一个的排序数组,然后要求的是每个数字的平方,然后以返回平方数所组成的新数组。

2025-11-05 00:13:59 145

原创 滑动窗口之长度最小子数组

两个指针往后移的过程中,哪一个是被动的移动哪一个是主动的移动,其实是尾部索引占主导地位,因为它遍历过的元素起始索引还会遍历一遍,真正影响最后的总和的还是尾部索引。所以说窗口索引是终止索引,而起始索引的移动是靠窗口内部和的大小来进行移动的。起始索引的移动逻辑就是:窗口内的总和一旦大于等于target之后,说明此时的区间长度是满足的,那满足归满足,有没有可能很大呢,所以这个时候就要缩小窗口大小,怎么缩小呢,就终止索引不动,将起始索引往后移动,并且对应的值要从sum中减掉。使用滑动窗口的灵魂三问?

2025-11-02 23:34:10 258

原创 双指针之三数之和

摘要:本文介绍了力扣第15题"三数之和"的解法,使用单层for循环结合双指针技术。首先对数组排序,然后外层循环固定一个元素,内层使用左右指针寻找使三个元素之和为零的组合。关键在于处理重复元素:外层循环比较当前与前一个元素,内层指针比较当前与下一个元素。时间复杂度为O(n^2),空间复杂度为O(1)。文章还解释了去重逻辑的设计原理,确保不遗漏有效解且避免重复解。

2025-10-27 22:54:16 224

原创 N皇后问题(回溯法经典问题)

理解回溯必先理解递归,有递归就一定有回溯。

2023-05-11 12:06:53 2105 1

空空如也

空空如也

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

TA关注的人

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