随笔分类 -  算法

我秃了,也变强了(
摘要:背包问题 背包问题 解题思路 二维 还是动态规划的五部曲。 通过设置一个二维数组来建立一个背包容量和物体重量的关系。dp[i][j],i代表当前背包的容量,j代表一种物体 找到递归关系:由于我们要找到符合塞满背包的物体,因此我们的dp需要比较放物体前后的值,然后取大的那个。 初始化数组:在背包容量为 阅读全文
posted @ 2024-07-26 00:57 不进育碧不改名 阅读(114) 评论(0) 推荐(0)
摘要:不同路径 不同路径 解题思路 通过动态规划,先将第一行和第一列设为1,目的是初始化dp,这样设置的理由是这些格子只有一条路能达到,接着就是遍历整个路径,每个格子所包含的路径和为其左边和上边的路径数之和,随后在目的地格子得到值。 知识点 动态规划 心得 没想到初始化的方式,导致没有实现动态规划。 不同 阅读全文
posted @ 2024-07-24 19:17 不进育碧不改名 阅读(111) 评论(0) 推荐(0)
摘要:斐波那契数 斐波那契数 解题思路 利用代码随想录给出的解题模板进行解题。 先确定dp数组和dp下标的含义,之后需要确定遍历的顺序,接着我们通过枚举获得遍历的规矩,最后确定dq的初始值。 知识点 动态规划 心得 第一次做动态规划,主要是掌握基本的解题思路,了解一下到底是怎么解决问题的 爬楼梯 爬楼梯 阅读全文
posted @ 2024-07-23 22:45 不进育碧不改名 阅读(136) 评论(0) 推荐(0)
摘要:合并区间 合并区间 解题思路 还是重叠区间的问题,不过这次要考虑的是最大右值,因为我们要去掉重叠的部分。当最大右值发生变化时就是意味着进入到下一个区间了,这时候就要存储结果了。 知识点 重叠区间 心得 复习了重叠区间 单调递增的数字 单调递增的数字 解题思路 利用贪心,通过从后往前遍历找到不符合单调 阅读全文
posted @ 2024-07-23 00:15 不进育碧不改名 阅读(143) 评论(0) 推荐(0)
摘要:用最少数量的箭引爆气球 用最少数量的箭引爆气球 解题思路 先根据数组中的第一个参数进行排序,之后通过记录最小右区间来判断是否重叠或者进入下个重叠区。贪心的思想是有重叠就尽可能地进行重叠,从而达到局部最优 知识点 重叠区间,贪心 心得 学会了如何判断和找寻重叠区间的方法 无重叠区间 无重叠区间 解题思 阅读全文
posted @ 2024-07-20 17:03 不进育碧不改名 阅读(146) 评论(0) 推荐(0)
摘要:加油站 加油站 解题思路 局部最优就是全局最优,首先确定起始位置,由于本题要么不能循环一圈,要么就一定存在一个能够返回起始点的循环,我们只需要排除那些存储的油为负数的点即可。 知识点 贪心算法 心得 当我们需要做这种考虑数值加减的贪心算法时,优先考虑和的变化是否能帮助解题。 分发糖果 分发糖果 解题 阅读全文
posted @ 2024-07-20 02:56 不进育碧不改名 阅读(127) 评论(0) 推荐(0)
摘要:买卖股票的最佳时机II 买卖股票的最佳时机II 解题思路 利用贪心算法,只要股票卖了后一天能获利,就买了,所以只要遍历一下整个数组,根据这个算法就能得到最终获利的数目 知识点 贪心 心得 歪打正着的一题 跳跃游戏 跳跃游戏 解题思路 利用贪心算法,只需要有一次跳转到数组之外说明就能跳到,所以我们每次 阅读全文
posted @ 2024-07-18 21:16 不进育碧不改名 阅读(178) 评论(0) 推荐(0)
摘要:分发饼干 分发饼干 解题思路 用贪心算法,胃口最大的孩子就需要尺寸最大的饼干,如果没有符合条件的饼干则换胃口第二大的孩子,以此类推。局部最优就是全局最优。 知识点 贪心 心得 简单 摆动序列 摆动序列 解题思路 通过遍历整个数组找到峰值,峰值则是找到最长的子序列,局部最优就是全局最优。当摆动序列发生 阅读全文
posted @ 2024-07-18 20:38 不进育碧不改名 阅读(145) 评论(0) 推荐(0)
摘要:递增子序列 递增子序列 解题思路 用set来去重,之后每次一个节点存入时与前一个节点进行大小比较,如果小就不存了,跳过剩余的回溯过程 知识点 回溯,去重 心得 在考虑去重的时候忘记了使用C++的数据结构set,得记下这个方法 全排列 全排列 解题思路 在回溯迭代的时候传入了一个统计数组元素是否已被使 阅读全文
posted @ 2024-07-16 22:02 不进育碧不改名 阅读(146) 评论(0) 推荐(0)
摘要:复原IP地址 复原IP地址 解题思路 首先要判断什么是正确的IP地址: 段位以0为开头的数字不合法 段位里有非正整数字符不合法 段位如果大于255了不合法 接着就是要通过一个变量来存储加'.'的次数,然后将字符串分成四分,每段都需要检查是否符合条件。 知识点 回溯(分割),字符串 心得 这是一道分割 阅读全文
posted @ 2024-07-15 21:48 不进育碧不改名 阅读(154) 评论(0) 推荐(0)
摘要:组合总和 组合总和 解题思路 利用回溯算法进行遍历,由于数组内的数字可以重复调用,因此在套用模板进行遍历时,下一次递归的startIndex是当前遍历的下标。 剪枝操作则是通过比较和是否大于目标值,如果大于则不进行下一次的递归,以此来减少循环遍历的次数,这个条件需要加到for循环中。 知识点 回溯 阅读全文
posted @ 2024-07-13 20:46 不进育碧不改名 阅读(160) 评论(0) 推荐(0)
摘要:组合 组合 解题思路 利用回溯算法来暴力枚举所有可能性。这里利用了代码随想录的解题模板即可。 剪枝方面,由于某些情况下(如k = n) 不需要遍历所有的可能性,因此我们要适当修改一下每次循环遍历的元素个数来进行优化 知识点 回溯 心得 如果知道如何将此类问题转换为一个n叉树,就会很清晰的套用模板解决 阅读全文
posted @ 2024-07-12 23:31 不进育碧不改名 阅读(189) 评论(0) 推荐(0)
摘要:修剪二叉搜索树 修剪二叉搜索树 解题思路 利用low和high来找到在区间的值,然后通过迭代将符合条件的节点相连即可 知识点 二叉搜索树 心得 我的做法是用数组存储所有节点,然后再删除区间外的节点。没有想到原来还有这种简单的做法 将有序数组转换为二叉搜索树 将有序数组转换为二叉搜索树 解题思路 关键 阅读全文
posted @ 2024-07-12 00:27 不进育碧不改名 阅读(165) 评论(0) 推荐(0)
摘要:二叉搜索树的最近公共祖先 二叉搜索树的最近公共祖先 解题思路 利用二叉搜索树的特性,公共祖先的值,就是在要找的两个值的区间里面 知识点 二叉搜索树 心得 想了一会如何利用二叉搜索树的特性。顺便复习了昨天做的题目 二叉搜索树中的插入操作 二叉搜索树中的插入操作 解题思路 在二叉搜索树上从根节点开始比较 阅读全文
posted @ 2024-07-10 20:04 不进育碧不改名 阅读(179) 评论(0) 推荐(0)
摘要:二叉搜索树的最小绝对差 二叉搜索树的最小绝对差 解题思路 使用二叉搜索树的时候记住他就是一个从小到大的有序数组,然后最小的绝对差则是会出现两两节点的差之间。 知识点 二叉搜索树 心得 一开始做没想到最小绝对差只需要前一个节点减后一个节点的结果。 二叉搜索树中的众数 二叉搜索树中的众数 解题思路 通用 阅读全文
posted @ 2024-07-10 00:37 不进育碧不改名 阅读(175) 评论(0) 推荐(0)
摘要:最大二叉树 最大二叉树 解题思路 找到最大值,随后将其分为左子树和右子树,重复循环即可。注意如果没有左子树,则返回null。 知识点 二叉树 心得 复习了一下用中序和后序构造二叉树的题目,做法是一样的 合并二叉树 合并二叉树 解题思路 两颗树同时进行遍历,当有一方的节点是null的时候,保存那个不是 阅读全文
posted @ 2024-07-09 00:11 不进育碧不改名 阅读(191) 评论(0) 推荐(0)
摘要:平衡二叉树 平衡二叉树 解题思路 二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数。 二叉树节点的高度:指从该节点到叶子节点的最长简单路径边的条数。 这道题由于需要求节点的高度差来进行判断,因此我们需要用后序遍历,先左右,后中间。推荐使用递归把每个节点的高度算出来,然后通过两个子节点左右相 阅读全文
posted @ 2024-07-05 23:14 不进育碧不改名 阅读(675) 评论(0) 推荐(0)
摘要:翻转二叉树 翻转二叉树 本题有多种解法,在这里我推荐用层次遍历,因为非常直观清晰。 解题思路 我们只需要对每一层的结点反转顺序即可(当上一层的节点反转顺序后,其子节点也会跟随,这个是解题的关键。具体实现时,我们使用堆栈,和之前的队列不同,因为这里需要反转。 知识点 堆栈,二叉树的层次遍历 心得 一道 阅读全文
posted @ 2024-07-04 23:59 不进育碧不改名 阅读(210) 评论(0) 推荐(0)
摘要:由于今天的所有题目都是和遍历相关,涉及到基础的二叉树数据结构,正好可以复习。 遍历顺序 前序: 递归的顺序为中间节点,左边节点和右边节点 中序: 递归的顺序为左边节点,中间节点和右边节点 后序: 递归的顺序为左边节点,右边节点和中间节点 递归 按照遍历的顺序递归相应的节点即可,例如前序递归,则先存储 阅读全文
posted @ 2024-07-04 01:02 不进育碧不改名 阅读(13) 评论(0) 推荐(0)
摘要:逆波兰表达式求值 逆波兰表达式求值 解题思路 使用堆栈数据结构,把数存进栈,当遇到运算符号的时候,弹出堆栈顶两个数,得到运算结果后再压入堆栈 知识点 堆栈 心得 这个很像编译原理中如何编译数字和运算符号的内容,也当作是一种复习了。 滑动窗口最大值 滑动窗口最大值 解题思路 这道题采用了一个单调队列, 阅读全文
posted @ 2024-07-03 00:31 不进育碧不改名 阅读(222) 评论(0) 推荐(0)