自定义博客皮肤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)
  • 问答 (2)
  • 收藏
  • 关注

原创 回溯相关-组合问题

普通暴力思路为:k=n时候,定义n层for循环,指针都相邻,取值即可。思路:此问题可以抽象为树,如下图,解释一下为什么取了2之后,只能从3,4中取,因为组合问题,不允许重复取元素,如果还从1,3,4中取,就会出现【1,2】重复。在[1,9]范围内使用4个不同的数字,我们可以得到的最小和是1+2+3+4 = 10,因为10 > 1,没有有效的组合。给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。输出: [[1,2,6], [1,3,5], [2,3,4]]

2024-03-24 16:51:21 353

原创 二叉搜索树相关

思路:有三种情况,1:root.val<key:则代表root.left都小于low,直接返回root.right。双指针,指向nums的开头和末尾,选取nums中间元素:(low+high)/2,作为根节点,不断改变指针的指向,递归构造二叉搜索树。给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。所以结果应当返回修剪好的二叉搜索树的新的根节点。

2024-03-23 15:54:41 305

原创 二叉搜索树插入和删除节点

若root的left和right都不为空,则寻找到root的right的最左下角元素node,将node.lelft与root.left链接,并将root.right替换root。思路一:我的版本比较粗暴,定义了一个dfs函数对搜索树进行遍历,寻找插入位置:当root节点的值小于val,判断root.right是否为空,若为空则插入节点;给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。

2024-03-20 16:41:54 217 1

原创 二叉搜索树-众数和最近公共祖先

思路:对二叉树进行递归,当root为null、p、q这三种情况的时候,进行返回,若没有返回,若root不为null、p、q,则判断root的左右子树left和right的返回值,若left和right都不为空,则代表都有返回值,为p或q,直接返回root即可;百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。结点右子树中所含节点的值 大于等于 当前节点的值。

2024-03-19 16:23:32 302

原创 合并二叉树及二叉搜索树相关

合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。否则开始合并,记录两节点的和val,构造node节点,继续构造node节点的左右子树。思路:二叉搜索树,左节点的值<根节点<右节点的值。给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值。思路:采用中序遍历递归收集二叉搜索树的节点值,循环判断相邻元素的差值,记录最小值。给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。

2024-03-18 12:15:43 433

原创 构造二叉树

给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。思路:定义一个函数,可以寻找自定义始末位置的数组中的最大值。思路:后续遍历最后一个值为根节点,利用hashMap存储中序遍历,方便后续找到中序遍历的下标。

2024-03-17 16:52:39 188 1

原创 113 路经总和(两种解法)

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。

2024-03-13 11:56:16 135

原创 二叉树相关-递归

当该节点不为空的时候,将val值记录在路径中,判断该节点是否是叶子节点,若是,则加入结果集;思路:使用dfs解决,重点在如何判断节点为左叶子节点,需要通过父节点来判断:当如节点的left节点不为空且left节点不含左右孩子,则left节点为左节点,并将该值记录为val,否则值为0,继续遍历左右子树即可。给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。叶子节点 是指没有子节点的节点。

2024-03-10 16:54:06 262 1

原创 翻转二叉树

根据二叉树镜像的定义,考虑递归遍历(dfs)二叉树,交换每个节点的左 / 右子节点,即可生成二叉树的镜像。给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。思路:对于每次出队的节点,交换其左右孩子。有迭代法和递归法两种解法。

2024-03-09 16:35:49 163 1

原创 二叉树的层序遍历

层序遍历:从左到右,一层一层的遍历二叉树,层序遍历为广度优先遍历,需要借助队列来实现。

2024-03-09 16:22:32 789 1

原创 二叉树的前中后序遍历

思路:二叉树的前中后序遍历,都属于深度优先遍历,需要借助栈来实现。思路:跟前序遍历差不多,但是入栈时候先左再右,最后反转结果即可。思路:借助指针来完成。

2024-03-09 15:35:16 120 1

原创 栈和队列相关

定义单调队列deque,维护deque中的值从头至尾单调递减,对窗口右端来说,当nums[j]进入时,需要删掉deque中小于nums[j]的值;对窗口左端来说,当nums[i-1]==deque的队列头(最大值),则需要从deque中删除头元素,因为nums[i-1]不是最大值,deque中已经提前删除了该值,不需要进行维护。最后用一个tmp栈,将原始栈中的元素移入,从tmp中出栈记录,则为最终答案。给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。

2024-03-07 14:21:47 869 1

原创 字符串相关

思路:先求出kmp算法中的next数组,拿出next[next.length-1],则为字符串s的最大公共前后缀maxBoth,用next数组长度-maxBoth-1,即为最小重复的子串长度。思路:循环的时候,i从0开始,每次i=i+2*k,反转区间为(i,min(i+k,S.length)-1).解释:如果两个单词间有多余的空格,反转后的字符串需要将单词间的空格减少到仅有一个。输入:s = [“H”,“a”,“n”,“n”,“a”,“h”]输入:s = [“h”,“e”,“l”,“l”,“o”]

2024-03-05 12:51:32 754

原创 哈希表相关

在频率数组中,下标为数字,值为该数字出现的次数。给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i!首先先将数组由小到大排序,使用i循环遍历数组,left指针为i+1,right指针指向末尾,求得三指针的和sum,若sum<0,则left++,若sum>0,则right–,若sum==0,记录该值即可。输入:nums1 = [1,2], nums2 = [-2,-1], nums3 = [-1,2], nums4 = [0,2]

2024-03-03 13:17:43 583

原创 随想录-链表相关

思路:快慢指针法,引入虚拟头节点,fast指针先走n步,然后用while循环让fast和slow一直走,直到fast.next==null,此时slow指针的下一个位置即为倒数第n个节点的位置,删除即可。思路:双指针法,指针A指向headA,指针B指向headB,当A与B不相交的时候,一直循环前进,若A到头,则进入headB继续循环,B指针同理。循环到cur指向空。思路:使用hash表来解决,指针从头开始循环遍历,每遍历节点就加入进hash表,若hash表中已存在该节点,则为环形的入口,返回即可。

2024-03-01 17:40:24 828 1

原创 数组-螺旋矩阵相关(模拟思想)

输入:array = [[1,2,3,4],[12,13,14,5],[11,16,15,6],[10,9,8,7]]输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输入:array = [[1,2,3],[8,9,4],[7,6,5]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]

2024-02-29 12:03:11 406

原创 数组-滑动窗口相关(长度最小的子数组等)

我们使用频率数组a,将种类为i的物体的个数记录在a[i]中,当滑动窗口加入新的元素fruits[i]时,若a[fruits[i]]==1,代表初次加入,则种类+1;先扩大滑动窗口的右边界,直到滑动窗口包含3个数字,此时缩小滑动窗口的左边界到只包含2个数字,继续扩大滑动窗口右边界,每次循环最后,滑动窗口中数字种类必定<=2,进行窗口长度比较和记录。思路:循环扩大滑动窗口右边界,直到窗口中包含所有子串的字符,此时缩小滑动窗口左边界,直至窗口中不含所有子串字符,再继续扩大右边界。你想要尽可能多地收集水果。

2024-02-29 11:48:01 745

原创 数组-移除元素相关

你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4。输入:nums = [0,1,2,2,3,0,4,2], val = 2。输入:nums = [0,0,1,1,1,2,2,3,3,4]

2024-02-28 11:33:39 844 1

原创 数组-二分查找相关

给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。进阶:你可以设计并实现时间复杂度为Olog⁡nO(\log n)Ologn的算法解决此问题吗?示例 1:输入:nums = [5,7,7,8,8,10], target = 8输出:[3,4]示例 2:输入:nums = [5,7,7,8,8,10], target = 6输出:[-1,-1]

2024-02-28 10:54:12 684

原创 【深基2.例12】上学迟到

学校和 yyy 的家之间的距离为s米,而 yyy 以v米每分钟的速度匀速走向学校。在上学的路上,yyy 还要额外花费10分钟的时间进行垃圾分类。学校要求必须在上午8:00到达,请计算在不迟到的前提下,yyy 最晚能什么时候出门。由于路途遥远,yyy 可能不得不提前一点出发,但是提前的时间不会超过一天。

2023-09-19 20:31:02 66 1

空空如也

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

TA关注的人

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