算法学习
文章平均质量分 85
主要记录自己算法学习的过程
溪溪1111
这个作者很懒,什么都没留下…
展开
-
代码随想录-动态规划-简单题目(Java)
如果某一问题有很多重叠子问题,使用动态规划是最有效的所以动态规划中每一个状态一定是由上一个状态推导出来的(这一点就区分于贪心),贪心没有状态推导,而是从局部直接选最优的以上,除不同路径两道题外,即使循环是双重循环,但dp数组也都是一位数组,j的循环是一种辅助。原创 2023-03-29 19:24:24 · 56 阅读 · 0 评论 -
代码随想录-回溯算法-分割问题(Java)
分割问题原创 2023-04-01 16:40:01 · 86 阅读 · 0 评论 -
代码随想录-动态规划-01背包问题(Java)
01背包问题原创 2023-03-29 19:52:44 · 621 阅读 · 0 评论 -
代码随想录-二叉树【3】(Java)
链接: 236. 二叉树的最近公共祖先本题很自然想到自底向上查找,回溯思想,而后序遍历(左右中)是天然的回溯过程,可以根据左右子树的返回值,来处理中节点的逻辑两种情况:1.p,q分属于左右子树2.p,q其中之一为公共祖先判断逻辑:如果递归遍历遇到q,就将q返回,遇到p 就将p返回,那么如果 左右子树的返回值都不为空,说明此时的中节点,一定是q 和p 的最近祖先。二叉搜索树的最近公共祖先链接: 235. 二叉搜索树的最近公共祖先与普通二叉树不同,二叉搜索树具有两个特征:1.二叉搜索树的左子树均小于根节点,原创 2023-03-31 22:32:46 · 30 阅读 · 0 评论 -
代码随想录 - 二叉树的各种遍历方法(Java)
那么再看看中序遍历,中序遍历是左中右,先访问的是二叉树顶部的节点,然后一层一层向下访问,直到到达树左面的最底部,再开始处理节点(也就是在把节点的数值放进result数组中),这就造成了。分析一下为什么刚刚写的前序遍历的代码,不能和中序遍历通用呢,因为前序遍历的顺序是中左右,先访问的元素是中间节点,要处理的元素也是中间节点,所以刚刚才能写出相对简洁的代码,而广度优先遍历的实现一般使用队列来实现,这也是队列先进先出的特点所决定的,因为需要先进先出的结构,才能一层一层的来遍历二叉树。我们以中序遍历为例,在。原创 2023-03-28 18:06:34 · 1079 阅读 · 0 评论 -
代码随想录-动态规划-子序列子数组相关问题(Java)
子序列子数组相关问题原创 2023-03-30 22:17:18 · 149 阅读 · 0 评论 -
代码随想录-贪心算法【2】(Java)
链接: 860.柠檬水找零本题思路非常简单主要是抓住问题的本质,没有抓住问题的本质,很容易被一些无关紧要的细节困住。认真审题,情况也不多,把各种情况列一下呗。自己的代码,if结构太多,冗长,容易出错官方代码在前面的判断中,只考虑有的情况,没有的情况正常操作;最后再判断按正常操作下的ten和five是否为负数,有负数说明我们在不符合条件的情况下操作了,所以报错。链接: 406.根据身高重建队列本题的思路很简单,主要是二维数组看起来会比较复杂但熟悉java语言的语法,本题会比较简单思路就是按身高从大到小排列原创 2023-04-01 20:53:58 · 62 阅读 · 0 评论 -
代码随想录-回溯算法-子集及序列问题(Java)
回溯算法-子集及序列问题原创 2023-04-01 17:37:31 · 183 阅读 · 0 评论 -
代码随想录-动态规划-完全背包问题(Java)
完全背包问题原创 2023-03-30 15:21:38 · 278 阅读 · 0 评论 -
代码随想录-二叉树【1】(Java)
针对翻转二叉树,本笔记给出了一种递归,三种迭代(两种模拟深度优先遍历,一种层序遍历)的写法,都是之前我们讲过的写法,融汇贯通一下而已。原创 2023-03-31 21:12:42 · 34 阅读 · 0 评论 -
代码随想录-动态规划-打家劫舍问题(Java)
链接: 198.打家劫舍自己的思路动态规划五部曲:1.dp[j] 是指偷到 第 j 号房屋时,能偷窃到的的最大金额2.不知道该怎么写(大胆写呗,别想那么多)官方讲解思路本题中,当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了;当前状态和前面状态会有一种依赖关系,那么这种依赖关系都是动态规划的递推公式1.dp[i]含义dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]2.dp[i] = dp[i - 2] + nums[i]3.dp数组如何初始化从递推公式dp[i] = max原创 2023-03-30 21:14:16 · 91 阅读 · 0 评论 -
代码随想录-动态规划-买卖股票的最佳时机(Java)
买卖股票的最佳时机原创 2023-03-30 21:53:39 · 152 阅读 · 0 评论 -
代码随想录一刷总结
一刷总结原创 2023-04-03 12:21:41 · 181 阅读 · 0 评论 -
代码随想录-回溯算法-全排列问题
链接: 46.全排列树枝去重设置一个布尔类型的used数组来记录该元素是否使用过如果使用过,used[i] == true 我们就将该元素跳过全排列II链接: 47.全排列 II原创 2023-04-01 17:46:45 · 53 阅读 · 0 评论 -
代码随想录-动态规划-回文子串相关问题(Java)
链接: 647. 回文子串重点区分回文子串与回文子序列的长度,子串说明这个子字符串必须是连续的而回文子序列不一定连续。本题因为回文子串是连续的字符串,不能用一般的动态规划方法做(maybe)1.dp数组含义表示下标i到下标j构成子串是回文串2.递推公式宏观把握:该回文串依赖是否为true细化,如果i 和 j 相同 或者相差一个元素,i + 1和j - 1这种形式正好错开,我们距离发现,当s.charAt(i) =s.charAt(j),即使不关注,依然是回文子串所以就可以分为三种(or前两种合并)情况。3.原创 2023-03-31 16:17:09 · 89 阅读 · 0 评论 -
代码随想录-回溯算法-组合问题(Java)
回溯算法组合问题原创 2023-04-01 16:12:29 · 314 阅读 · 0 评论 -
代码随想录-贪心算法【1】(Java)
贪心算法原创 2023-04-01 20:39:37 · 183 阅读 · 0 评论 -
代码随想录-动态规划-字符删除相关问题(Java)
动态规划的序列删除操作原创 2023-03-31 15:59:45 · 59 阅读 · 0 评论 -
代码随想录-单调栈(Java)
单调栈原创 2023-04-03 12:10:54 · 86 阅读 · 0 评论 -
代码随想录-二叉树【2】(Java)
链接: 106.从中序与后序遍历序列构造二叉树具体思路见代码or思维导图自己刚开始写时,思路非常混乱,应该用文字理清思路,在代码中注释后,再一步步想办法如何用代码诠释这些文字后来各种小的报错root.left和root.right不需要再次定义!在TreeNode的定义中已经将它们的定义写好了。最大二叉树链接: 654.最大二叉树思路非常简单找到序列中的最大值,创建节点,然后再遍历最大值分隔出的左区间和右区间,用root.left和root.right进行接收注意:用数组构造二叉树的题目,每次分隔尽量原创 2023-03-31 22:14:48 · 33 阅读 · 0 评论 -
代码随想录Day3,4 链表相关题目
代码随想录链表相关题目(一刷补博客版)原创 2023-03-23 21:23:15 · 27 阅读 · 0 评论 -
代码随想录-Day8、9 字符串
代码随想录 字符串原创 2023-03-25 22:09:12 · 34 阅读 · 0 评论 -
代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素(Java)
代码随想录算法训练营第一天,希望能够坚持下去。原创 2023-02-01 21:48:30 · 3922 阅读 · 1 评论 -
代码随想录-Day10、11、13栈与队列相关题目(Java)
这k个元素按照小顶堆弹出的顺序,在前面的应该是出现次数最少的,所以我们设置了一个新的数组,采用倒序接收优先级队列中的元素(这个元素是键值对,我们只用接收键值对里面的key即可)大体思路是,一边遍历哈希表,一边往优先级队列里面加,如果优先级队列大于我们所需的大小k,则新元素与优先级队列最开头即最小的元素进行比较,如果大于,则弹出开头最小的元素,将新元素加入优先级队列中。在单调队列里面比较大小,如果该新元素比单调队列里面的所有元素都大,则单调队列里面的元素都删除,加入新的元素。原创 2023-03-27 15:00:06 · 44 阅读 · 0 评论 -
代码随想录-Day6,7 哈希表
代码随想录 Day6,7 哈希表原创 2023-03-24 22:23:38 · 35 阅读 · 0 评论 -
代码随想录算法训练营第二天| 977.有序数组的平方 209.长度最小的数组 59.螺旋矩阵II(Java)
双指针,滑动窗口,螺旋矩阵原创 2023-02-02 22:58:44 · 3630 阅读 · 0 评论