- 博客(41)
- 收藏
- 关注
原创 算法学习打卡day46|动态规划:子序列问题
一般情况下一但涉及到连续子数组问题,通常dp数组存的是中间状态,我们需要用result每次取获取结果,而相对顺序的话不需要result,每次取最大值即可。
2023-11-29 18:42:33
389
原创 算法学习打卡day42|动态规划:0 - 1背包问题
经典0-1背包问题:有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。
2023-11-13 12:31:42
144
原创 算法学习打卡day41|栈和队列:栈和队列相互实现、括号匹配、逆波兰表达式、滑动窗口最大值问题、求前 K 个高频元素
算法学习打卡day41|栈和队列:栈和队列相互实现、括号匹配、逆波兰表达式、滑动窗口最大值问题、求前 K 个高频元素
2023-11-07 17:49:41
190
原创 算法学习打卡day38|动态规划初探、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
动态规划初探、509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯
2023-10-31 21:03:54
213
原创 算法学习打卡day35|贪心算法之重叠区间问题:435. 无重叠区间、763.划分字母区间、56. 合并区间
贪心算法之重叠区间问题:435. 无重叠区间、763.划分字母区间、56. 合并区间
2023-10-27 12:18:08
466
原创 算法学习打卡day34|860.柠檬水找零、406.根据身高重建队列 、452. 用最少数量的箭引爆气球
贪心算法:柠檬水找零、身高重建、用最少数量箭引爆气球
2023-10-26 18:08:22
191
原创 算法学习打卡day32| 122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
贪心算法:122.买卖股票的最佳时机II、55. 跳跃游戏、45.跳跃游戏II
2023-10-24 21:15:09
77
原创 算法学习打卡day24|回溯算法初探,组合问题
回溯算法,组合问题 :给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。你可以按 任何顺序 返回答案。
2023-10-16 21:21:39
83
1
原创 算法学习打卡day23|二叉树题目总结
int val;什么时候递归函数前加if判断?一般情况来说:如果让空节点(空指针)进入递归,就不加if,此时对于空节点的判断交给函数的退出条件那里了,如果不让空节点进入递归,就加if限制一下, 终止条件也会相应的调整。递归函数什么时候需要返回值,什么时候不需要?如果需要搜索整棵二叉树且不用处理递归返回值,递归函数就不要返回值。(113.路径总和ii)如果需要搜索整棵二叉树且需要处理递归返回值,递归函数就需要返回值。(二叉树的最近公共祖先)
2023-10-15 16:02:27
197
1
原创 算法学习打卡day22| 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。输出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]输入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]解释:[0,-10,5,null,-3,null,9]输出:[0,-3,9,-10,null,5]
2023-10-14 19:42:13
134
1
原创 算法学习打卡day21|二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点
给定二叉搜索树(BST)的根节点 root 和要插入树中的值 value ,将值插入二叉搜索树。给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8。例如,给定如下二叉搜索树: root = [6,2,8,0,4,7,9,null,null,3,5]输入:root = [4,2,7,1,3], val = 5。
2023-10-13 21:26:44
121
原创 算法学习打卡day20|530.二叉搜索树的最小绝对差、501.二叉搜索树中的众数、236. 二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1。给你一个二叉搜索树的根节点 root ,返回 树中任意两不同节点值之间的最小差值。
2023-10-13 20:46:10
71
原创 算法学习打卡day19|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。输出:[6,3,5,null,2,0,null,null,1]输出:[3,4,5,5,4,null,7]节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。
2023-10-12 22:58:54
34
原创 算法学习打卡day18|513.找树左下角的值、112. 路径总和、106.从中序与后序或前序遍历序列构造二叉树
判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum。给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树。迭代法:和求所有叶子路径那道题类似,用前序遍历(因为从根节点走),然后把路径和存起来,遇到叶子节点就判断,如果是。给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。叶子节点 是指没有子节点的节点。
2023-10-12 22:13:43
144
原创 算法学习打卡day17|110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和
给你一个二叉树的根节点 root ,按 任意顺序 ,返回所有从根节点到叶子节点的路径。输入:root = [3,9,20,null,null,15,7]一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。给定二叉树的根节点 root ,返回所有左叶子之和。给定一个二叉树,判断它是否是高度平衡的二叉树。叶子节点 是指没有子节点的节点。
2023-10-12 12:18:22
64
原创 算法学习打卡day15 |104.二叉树的最大深度、111.二叉树的最小深度、222.完全二叉树的节点个数
完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面一层的节点都集中在该层最左边的若干位置。输入:root = [2,null,3,null,4,null,5,null,6]二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。输入:root = [3,9,20,null,null,15,7]输入:root = [3,9,20,null,null,15,7]输入:root = [1,null,2]说明:叶子节点是指没有子节点的节点。
2023-10-12 11:05:24
135
原创 算法学习打卡day14|层次遍历扩展题、二叉树翻转、对称二叉树
给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。给你一个二叉树的根节点 root , 检查它是否轴对称。输入: [1,2,3,null,5,null,4]输入:root = [4,2,7,1,3,6,9]输入:root = [1,2,2,3,4,4,3]输出:[4,7,2,9,6,3,1]输出: [1,3,4]
2023-10-12 10:19:04
43
原创 算法学习打卡day13 | 二叉树的遍历(前、中、后序、层次)
给你二叉树的根节点 root ,返回其节点值的 层序遍历。(即逐层地,从左到右访问所有节点)。
2023-10-10 23:32:33
60
1
原创 算法学习打卡day4|合并两个有序链表、合并k个有序链表、19.删除链表的倒数第N个节点、寻找单链表的中点、链表相交、142.环形链表II
输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3。从各自的表头开始算起,链表 A 为 [4,1,8,4,5],链表 B 为 [5,0,1,8,4,5]。输入:lists = [[1,4,5],[1,3,4],[2,6]]给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4,5,6]
2023-10-01 19:28:06
765
1
原创 算法学习打卡day3 |203.移除链表元素、707.设计链表、24. 两两交换链表中的节点、206.反转链表、92. 反转链表 II、25. K 个一组翻转链表
void addAtIndex(int index, int val) 将一个值为 val 的节点插入到链表中下标为 index 的节点之前。给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。
2023-09-29 17:56:52
836
原创 算法学习打卡day7 | 344.反转字符串、 541. 反转字符串II、 剑指Offer 05.替换空格、 151.翻转字符串里的单词、 剑指Offer58-II.左旋转字符串
给你一个字符串 s ,请你反转字符串中 单词 的顺序。现需将路径加密,加密方法为将 path 中的分隔符替换为空格 " ",请返回加密后的字符串。返回的结果字符串中,单词间应当仅用单个空格分隔,且不包含任何额外的空格。给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。输入:s = [“h”,“e”,“l”,“l”,“o”]输出:[“o”,“l”,“l”,“e”,“h”]输入:s = “abcd”, k = 2。
2023-09-28 22:21:15
363
原创 算法学习打卡day6|454.四数相加II 383. 赎金信 15. 三数之和 18. 四数之和
当需要判断一个元素是否在集合中或者一个元素是否出现过的时候当需要去重的时候,要想到用哈希表哈希函数是用来计算哈希key值的,用来唯一标识一个数据哈希碰撞是指哈希函数计算出的key值相同导致访问冲突,怎么解决?线性探测法和拉链法线性探测法需要数组足够大,起码足够容纳数据,拉链法是将同key的数据用链表链接起来.242.有效的字母异位词383. 赎金信,两道题类似的做法。当数据量很大时,不适合使用数组,主要因为如下两点:数组的大小是有限的,受到系统栈空间(不是数据结构的栈)的限制。
2023-09-26 22:01:45
830
1
原创 算法学习打卡day5|242.有效的字母异位词 349. 两个数组的交集 202. 快乐数 1. 两数之和
由于一个元素不能重复出现,我们可以直接遍历元素,然后在哈希表中寻找,是否存在(target-当前值)这个数字,存在就直接返回,不存在可以把当前元素添加到哈希表中,因为题目要求返回下标,那么我们可以使用map的value来记录下标值。那么,我们可以利用数组下标标识26个英文字母,然后存储每个字母的次数,首先遍历s,统计出每个字母的次数,然后遍历t,在数组中依次减去对应字母出现的次数,这样最后得到的数组如果每项都为0,即为所求结果。输入:nums1 = [1,2,2,1], nums2 = [2,2]
2023-09-25 23:18:57
951
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人