- 博客(19)
- 收藏
- 关注
原创 动态规划之背包问题 01背包
什么是01背包? 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。首先,它属于动态规划问题。所以可以用动态规划的方法处理(二维dp数组)、 3.初始化:都初始化为0。这样才能让dp数组在递归公式的过程中取的最大的价值,而不是 被初始值覆盖了。 4.遍历顺序:倒序遍历。即背包从大到小,这样才能保证物品i只被放入一次。...
2022-04-25 19:44:16
620
原创 贪心算法 (Leetcode题目为例)
今天做了三道题,都是需要先排序Arrays.sort()再进行贪心算法贪心算法实则就是通过局部最优推导出全局最优,推导回去时又找不到反例,则可以用贪心算法解决这里涉及到一个问题就是对二维数组进行排序。需要重写sort()方法中的Comparator比较器可使用lambda表达式对比较器进行简写 ->Arrays.sort(people, (a, b) -> { if (a[0] == b[0]) return a[1] - b[1]; ..
2022-04-19 20:22:36
771
原创 Java回溯算法中的组合问题 续
组合总和注意:本题的特色是没有数量要求,可以无限重复,但是有总和的限制,所以间接的也是有个数的限制。 因为没有组合数量要求,所以递归层数无限制回溯三部曲:递归函数参数首先,全局变量两个result和path然后题目中所给的参数集合candidates目标值target还可以定义int型的sum还需要startIndex来控制for循环的起始位置 2. 递归终止条件两种情况:1.sum==target收集结果 ...
2022-04-11 21:56:22
187
原创 Java 回溯算法中的组合问题
首先,回溯算法与递归的关系:回溯与递归相辅相成递归函数下面做回溯操作回溯法都可以抽象为一个树形结构n叉树回溯法解决的都是在集合中递归查找子集,集合的大小就构成了树的宽度,递归的深度,都构成的树的深度。回溯算法中的组合问题如下图所示需要定义两个全局变量对于组合问题,需要注意单层搜索的过程for循环用来横向遍历,递归的过程就是纵向遍历for循环每次从startIndex开始遍历,然后用path保存取到的节点i。backtracking(递归函数)通过不断调用...
2022-04-10 22:09:47
1075
原创 KMP算法(实现strStr())
kMP主要应用在字符串匹配上。KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。首先需要知道什么是前后缀?前缀是指不包含最后一个字符的所有以第一个字符开头的连续子串后缀是指不包含第一个字符的所有以最后一个字符结尾的连续子串模式串与前缀表对应位置的数字表示的就是:下标i之前(包括i)的字符串中,有多大长度的相同前缀后缀。若当前字符不匹配,就看前一位的前缀表的数值,若前一个字符的前缀表的数值是2, 所有把下标移动到
2022-04-09 18:15:22
284
原创 (JAVA)Leetcode 删除二叉搜索树中的节点 将有序数组转换为二叉搜索树 把二叉搜索树转换为累加树
删除二叉搜索树中的节点节点删除要比节点增加复杂得多。主要需要考虑五种情况。递归法:1.确定递归参数以及返回值参数:root原树节点 要删除的节点 返回值:返回删除后的树节点root2.确定终止条件遇到空节点后返回3.确定单层递归的逻辑删除节点所遇到的五种情况:第一种情况:没找到删除的节点,遍历到空节点直接返回了 找到删除的节点 第二种情况:左右孩子都为空(叶子节点),直接删除节点, 返回NULL为根节点 第三种情况:删除节点的左孩...
2022-04-01 15:33:43
873
原创 (JAVA)Leetcode 二叉搜索树中的众数 二叉树的最近公共祖先 二叉搜索树的最近公共祖先 二叉搜索树的插入操作
二叉搜索树中的众数既然是搜索树,中序遍历就是有序的思路:从头遍历有序数组元素出现的频率,相邻两个元素作比较,把出现频率最高的元素输出。技巧:1.使用两个指针 pre指针和cur指针 初始时pre=null,所以pre=null时便是比较的第一个元素。 2.众数很有可能不止一个,所以需要一个数组来存放众数 3.只需遍历一遍。若count==maxcount,则把这个元素加入到结果集中。 ...
2022-03-30 21:54:33
794
原创 (JAVA)Leetcode 最大二叉树 二叉搜索树中的搜索 验证二叉搜索树
最大二叉树给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下:二叉树的根是数组中的最大元素。 左子树是通过数组中最大值左边部分构造出的最大二叉树。 右子树是通过数组中最大值右边部分构造出的最大二叉树。通过给定的数组构建最大二叉树,并且输出这个树的根节点。采用前序遍历 先构造中间节点 然后递归构造左子树和右子树确定递归函数的参数和返回值参数:存放元素的数组 数组的最左边 数组的最右边返回值:返回该数组构造的二叉树的头结点 返回类型是指向节点...
2022-03-29 20:23:33
163
原创 Leetcode 从中序与后序遍历序列构造二叉树 以及从前序与中序
从中序与后序遍历序列构造二叉树先看下图具体步骤如下:第一步:如果数组大小为零的话,说明是空节点了。第二步:如果不为空,那么取后序数组最后一个元素作为节点元素。第三步:找到后序数组最后一个元素在中序数组的位置,作为切割点第四步:切割中序数组,切成中序左数组和中序右数组 (顺序别搞反了,一定是先切中序数组)第五步:切割后序数组,切成后序左数组和后序右数组第六步:递归处理左区间和右区间难点:切割区间 此题为左闭右开型(中序数组大小一定是和后序数组大小相同) ...
2022-03-28 22:05:10
578
原创 Leetcode 左叶子之和 找树左下角的值 路径总和
左叶子之和左叶子的明确定义:如果左节点不为空,且左节点没有左右孩子,那么这个节点的左节点就是左叶子如果该节点的左节点不为空,该节点的左节点的左节点为空,该节点的左节点的右节点为空,则找到了一个左叶子。完整代码如下:递归法class Solution { public int sumOfLeftLeaves(TreeNode root) { if(root==null) return 0; int leftValue =sumOfLeftLeave
2022-03-27 22:10:55
652
原创 Leetcode 平衡二叉树 二叉树的所有路径
平衡二叉树什么是平衡二叉树?一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。递归法:定义一个方法getHeight(TreeNode node) 当node为null时返回0 定义左子树节点方法和右子树节点方法 当左(右)子树节点getHeight()返回值为-1时,返回-1 当左子树节点返回值-右子树节点返回值的绝对值大于1时,返回-1 不属于以上情况时,返回两者最大值+1.完整代码如下:class Solution {
2022-03-25 22:13:47
561
原创 Leetcode 完全二叉树的节点个数 二(N)叉树的最大深度 最小深度
完全二叉树的节点个数完全二叉树只有两种情况,情况一:就是满二叉树,情况二:最后一层叶子节点没有满。对于情况一,可以直接用 2^树深度 - 1 来计算,注意这里根节点深度为1。对于情况二,分别递归左孩子,和右孩子,递归到某一深度一定会有左孩子或者右孩子为满二叉树,然后依然可以按照情况1来计算。本题我使用递归法解决完整代码如下:class Solution { public int countNodes(TreeNode root) { if(root==nul
2022-03-24 20:52:07
2364
原创 Leetcode 对称二叉树 二叉树的层次遍历 翻转二叉树
对称二叉树什么是对称二叉树?如上图所示判断一个二叉树是否为对称二叉树?判断步骤:1.头节点的左子树节点是否等于右子树节点; 2.左子树节点的左子树节点是否等于右子树节点的右子树节点; 3.左子树节点的右子树节点是否等于右子树节点的左子树节点;是否等于的情况可以分为四种类型:1.left == null && right == null; true2.left != null &am...
2022-03-23 22:39:33
228
原创 Leetcode 二叉树遍历 Mysql DML&DQL
二叉树遍历当前掌握了二叉树三种遍历方法:1.递归遍历 2.非递归遍历(迭代遍历) 3.统一迭代法遍历分为三种方式:1.前序遍历:中→左→右2.中序遍历:左→中→右3.后序遍历:左→右→中First,递归遍历递归算法的三个要素(以本题为例):1.确定递归函数的参数和返回值。遍历节点的数值不需要返回值 所以定义为voidvoid order(TreeNode root,List<Integer> result)2.确定终止条件。当遍历到的节点为
2022-03-22 22:07:34
1086
原创 Mysql学习进度 力扣刷题
今日开始mysql的学习。前段时间过了一遍JavaSE,现在的阶段就是边刷力扣边学习mysql数据库。力扣刷题:1.逆波兰表达式求值主要思路:利用栈和队列的性质 遍历字符串时,当遇到运算符时双向队列deque末尾两个元素弹出实现运算过程,注意:后一个对前一个进行操作(尤其是减法和除法)。结果push进栈中,遇到数字也push(保证数字是整数型:Integer.valueOf)。2.滑动窗口最大值主要思路:利用栈和队列的性质 本题需...
2022-03-17 20:47:15
590
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人