自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 力扣437力扣总和Ⅲ

采用前缀和+dfs,curr_sum代表从根节点到当前节点的和,targetSum代表的就是目标和,我们想要的是在前缀和里面寻找 curr_sum - prefix[A的父节点] = targetSum。给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。路径 不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。

2026-08-02 19:20:20 228

原创 力扣105从前序与中序遍历序列构造二叉树

给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。需要明确谦虚遍历的第一个节点是树的根节点,中序遍历根节点前面的节点是他的左子树,根节点后面的节点是他的右子树。

2026-07-29 15:56:01 33

原创 力扣114二叉树展开为链表

展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null。采用递归,把左子树挪到右子树,右子树移到当前右子树的末尾。展开后的单链表应该与二叉树 先序遍历 顺序相同。

2026-07-29 14:51:21 178

原创 力扣543二叉树的直径

二叉树的 直径 是指树中任意两个节点之间最长路径的 长度。这条路径可能经过也可能不经过根节点 root。采用递归方法,这颗树深度取决于 左子树和右子树的深度。给你一棵二叉树的根节点,返回该树的 直径。两节点之间路径的 长度 由它们之间边数表示。

2026-06-30 15:20:41 177

原创 力扣146LRU缓存

put函数是把节点放到哈希表中,如果key已经存在,就是改值,改完之后把这个节点移动到链表头,如果key不存在,就添加,然后这个节点移动到链表头,但是如果超过哈希表的容量了,就要删除链表的尾节点。首先定义一些双端链表的实现方法,新增链表节点到头节点,删除链表节点,把链表节点移到头节点,删除链表尾节点。int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返回 -1。get函数是提取哈希表中的值,如果不存在,就返回-1,提取完之后,把这个节点移动到链表头。

2026-06-28 17:25:11 199

原创 力扣23合并K个升序链表

首先先把每个链表头放入堆中,当堆里不为空的时候,挑选出最小的,放入dummy,当堆里的链表不为空的时候,不断放进去。这个题采用最小堆的方法,挑选最小的出来,堆里默认是最小堆,如果要最大堆,可以取相反数。请你将所有链表合并到一个升序链表中,返回合并后的链表。给你一个链表数组,每个链表都已经按升序排列。

2026-06-27 20:08:08 193

原创 力扣138随机链表的复制

新节点的 next 指针和 random 指针也都应指向复制链表中的新节点,并使原链表和复制链表中的这些指针能够表示相同的链表状态。复制链表中的指针都不应指向原链表中的节点。题目很长,简单来说就是,链表的节点有一个next指针和random指针,next指针指向下一个节点,random节点指向其他节点。给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。容易发现,新节点的random指向原节点random指向的next节点。

2026-06-24 17:52:43 154

原创 力扣25.K个一组翻转链表

在建立完连接之后,就可以去把上一组的尾节点换成这一组的新尾节点,并更换下一组的头节点,并把end节点换到下一组的头节点了。但是这不是关键,我的想法除了翻转这组链表之后,需要记录到上一组链表的尾节点,下一个组链表的头节点,然后接在一起。总的来说就是,用end节点来当尾节点,当攒够了k个节点的时候,就处理一下,如果没到k个,就继续往下走。所以这个新尾节点就可以指向下一组的头节点了,上一组的尾节点可以指向这一组的新头节点。保存这k个节点的尾节点,并得到下一组的头节点,断开这k个节点。

2026-06-23 21:35:02 214

原创 力扣240搜索二维矩阵Ⅱ

做这个题的时候,我以为这个矩阵是方阵,所以我根据左上角和右下角来卡值,如果卡到的话,就会从一列和一行中寻找目标值,但是当不是方阵的时候,只能卡到矩阵的一部分,会剩下一个长条。这个长条还是跟这个矩阵一样,要再走一次,感觉有点麻烦,放弃了。编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target。这个题采取的是左下角和右上角,右下角往下或者往左走,当目标值更大的时候,往下走,目标值小的时候,往左走。每行的元素从左到右升序排列。每列的元素从上到下升序排列。

2026-06-18 20:40:14 39

原创 力扣41缺失的第一个正数

分析其原因,是因为我的错误解法是因为我要保证数要在正确的位置,但是如果出现[1,1]这种情况,就会无限循环下去,因为总有个1不在正确的索引位置。采用交换法,保证每个位置可以放着正确的值,但如果超出我们的范围,就说明不用管了,因为再怎么换也不会放到正确的位置,就让他随风飘荡吧!正确解法是保证位置有正确的数。对于这两个1的情况,就会保证索引0的位置是有正确的数,但是索引1就没有正确的数,循环就会停止。给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。我把while换成了下面这个。

2026-06-15 21:43:46 223

原创 力扣238除了自身以外数组的乘积

给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除了 nums[i] 之外其余各元素的乘积。题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。采用的是第一次遍历先计算每个元素左边的成绩,第二次遍历再计算每个元素右边的成绩,直接乘到答案上。请 不要使用除法,且在 O(n) 时间复杂度内完成此题。

2026-06-15 21:08:14 168

原创 力扣76最小覆盖子串

给定两个字符串 s 和 t,长度分别是 m 和 n,返回 s 中的 最短窗口 子串,使得该子串包含 t 中的每一个字符(包括重复字符)。当左指针指向的字符不在t字符串里时,左指针直接右移,但若左指针指向的字符在t字符串里,就需要将hs字典的该字符个数减一,还需要判断是否还满足ht字典。当右移之后,满足不了ht字典之后,停止左指针右移,继续右指针右移。当匹配上的时候,保存一下这段字符,左指针开始右移。测试用例保证答案唯一。

2026-06-14 18:00:27 227

原创 239. 滑动窗口最大值

给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。队首元素保证是最大元素,也就是说只要队首元素在滑动窗口内,就是最大值。而当不在时,就可以直接弹出,存放到结果集。而在队尾加入元素时,要保证加入的元素不能比滑动窗口已有的元素大,也就是在加入之前,弹出那些比自己小的元素。维护一个双端队列,数值从大到小,并且队列里的值存放的是数值的数组下标,而不是数值本身。暴力法非常简单,但是在应对大数据的时候时间超时;

2026-06-12 17:28:38 262

原创 力扣56合并区间

以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi]。请你合并所有重叠的区间,并返回 一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。存放结果的数组,如果将要排序的元素的起点大于结果数组的终点,就要考虑重叠->合并。如果小于的话,就可以直接加入结果数组。合并的时候,需要选大的当终点。把数组按照元素的起点排序。

2026-05-07 10:30:23 32

原创 力扣560和为K的子数组

给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数。可以采用前缀和和哈希表,哈希表存放和为“某个值”出现的次数,然后就可以进行相加了。题目要求是连续序列,可以通过求解一个片段的连续序列和为K。子数组是数组中元素的连续非空序列。

2026-04-23 15:09:45 45

原创 力扣483找到字符串中所有字母异位词

需要采用滑动串口,左边移除一个字符,右边添加一个字符,又因为他不要求字符顺序,所以可以采用每个字符的出现次数来判断是否匹配上。给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

2026-04-23 14:50:43 57

原创 力扣3无重复字符的最长子串

1.这个题可以采用滑动窗口,右窗口不断前进,当出现了这个窗口重复的元素之后,就需要把左窗口挪到重复的元素这里,并更新最大值。给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。2.而如何挪到重复的元素这里,就需要通过字典来保存字符最后出现的位置。

2026-04-20 15:02:45 39

原创 力扣42接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。那如何计算水量就需要通过最大高度-当前的水高,如果当前水高更高,就需要更新最大高度。需要明确怎么才能存不住水:取决于哪边的水高更小,水量就由哪边决定。

2026-04-20 14:22:48 55

原创 力扣15三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!= k ,同时还满足 nums[i] + nums[j] + nums[k] == 0。3.双指针,当匹配到目标值的时候,左边和右边同时向中间趋近,如果值较小,则left+1,值较大时,则right-1。4.需要注意一下去重,一个是在选定第一个数字的时候,避免重复,另一个就是在选定其余两个数字的时候,要避免重复。总体思路:先选定一个值,然后双指针查看是否可以得到-nums[i]

2026-04-19 11:13:42 34

原创 力扣128.最长连续序列

在递归函数里面,先判断num是否存在,如果不存在,说明num就不会是开头点,可以直接返回0,如果以num为开头的序列存在,就可以直接返回,如果还没定义,以num为开头的序列长度=以num+1为开头的序列长度+1。给定一个未排序的整数数组 nums ,找出数字连续的最长序列(不要求序列元素在原数组中连续)的长度。2.使用动态规划,我们的dp定义是以num为开头的最长连续序列长度,请你设计并实现时间复杂度为 O(n) 的算法解决此问题。1.先去重,使用set。

2026-04-17 18:14:46 63

空空如也

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

TA关注的人

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