随笔分类 - 算法
代码随想录算法Day41 | 343. 整数拆分 , 96.不同的二叉搜索树
摘要:343. 整数拆分 题目链接:343. 整数拆分 - 力扣(LeetCode) 思路 动规五部曲,分析如下: 确定dp数组(dp table)以及下标的含义 dp[i]:分拆数字 i,可以得到的最大乘积为dp[i]。 确定递推公式 可以想 dp[i]最大乘积是怎么得到的呢? 其实可以从1遍历j,然后
代码随想录算法Day39 | 62.不同路径,63. 不同路径 II
摘要:62.不同路径 题目链接:62. 不同路径 - 力扣(LeetCode) 思路 确定dp数组(dp table)以及下标的含义 dp[i][j] :表示从(0 ,0)出发,到(i, j) 有dp[i][j]条不同的路径。 确定递推公式 dp[i][j] = dp[i - 1][j] + dp[i][
代码随想录算法Day37 | 738.单调递增的数字
摘要:738.单调递增的数字 题目链接:738. 单调递增的数字 - 力扣(LeetCode) 思路 将数字转换成字符数组形式,然后从后向前遍历,当遇到当前这个数大于后一个数的时候,这个数减一,他的后一个数赋为9,这也是贪心策略。 在代码实现上,可以设置一个start变量来记录需要变为 9 的起始位置。
代码随想录算法Day34 | 1005.K次取反后最大化的数组和 ,134. 加油站 , 135. 分发糖果
摘要:1005.K次取反后最大化的数组和 题目链接:1005. K 次取反后最大化的数组和 - 力扣(LeetCode) 思路 贪心思路,局部最优:让绝对值大的负数变为正数,当前数值达到最大,整体最优:整个数组和达到最大。 当数组中的负数全部取反后,K仍然大于0时,这时又是一个贪心:局部最优:只找数值最小
代码随想录算法Day31 | 455.分发饼干 ,376. 摆动序列 ,53. 最大子序和
摘要:455.分发饼干 题目链接:455. 分发饼干 - 力扣(LeetCode) 思路 这里的局部最优就是大饼干喂给胃口大的,充分利用饼干尺寸喂饱一个,全局最优就是喂饱尽可能多的小孩。 也可以换一个思路,小饼干先喂饱小胃口。 代码 1 class Solution { 2 // 思路1:优先考虑饼干,小
代码随想录算法Day29 | 491.递增子序列 ,46.全排列 ,47.全排列 II
摘要:491.递增子序列 题目链接:491. 递增子序列 - 力扣(LeetCode) 思路 这道题和 90.集合II 类似。不同的是这道题不能通过排序使相同元素聚集在一起,因此不能使用 used数组 或者 startIndex 的方法去重。 在这道题中,虽然我们不可以让相同元素聚集在一起,但是我们可以通
代码随想录算法Day28 | 93.复原IP地址, 78.子集 , 90.子集II
摘要:93.复原IP地址 题目链接:93. 复原 IP 地址 - 力扣(LeetCode) 思路 复原ip地址,本质上还是切割问题,但是有了不少的条件: 只能切成4段。 每一段的长度如果大于1,那么就不能是0开头。如果长度为1,可以是0。 每一段的数字在0~255之间。 于是我们对之前切割回文的代码进行修
代码随想录算法Day27 | 39. 组合总和 , 40.组合总和II ,131.分割回文串
摘要:39. 组合总和 题目链接:39. 组合总和 - 力扣(LeetCode) 思路 既然题目说可以数组中的数可以无限制重复被选取,那么说明在选取该元素的下一个分支也可以继续使用。 选取和剪枝过程如图: 注意:为什么取了2以后,剩余元素为5,3。因为如果剩余元素为2,5,3的话在后续操作中会出现重复值的
代码随想录算法Day25 | 216.组合总和III, 17.电话号码的字母组合
摘要:216.组合总和III 题目链接:216. 组合总和 III - 力扣(LeetCode) 思路 本题思路与 77.组合 差不多,加个限制条件即可解决。 选取过程如图: 代码 1 class Solution { 2 List<List<Integer>> result = new ArrayLis
代码随想录算法Day22 | 235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入操作 ,450.删除二叉搜索树中的节点
摘要:235. 二叉搜索树的最近公共祖先 题目链接:235. 二叉搜索树的最近公共祖先 - 力扣(LeetCode) 思路 本题可以利用二叉搜索树 有序 的特性。 在有序树里,如果判断一个节点的左子树里有p,右子树里有q呢? 因为是有序树,所有 如果 中间节点是 q 和 p 的公共祖先,那么 中节点的数组
代码随想录算法Day21 | 530.二叉搜索树的最小绝对差 ,501.二叉搜索树中的众数 ,236. 二叉树的最近公共祖先
摘要:530.二叉搜索树的最小绝对差 题目链接:530. 二叉搜索树的最小绝对差 - 力扣(LeetCode) 思路 题目中要求在二叉搜索树上任意两节点的差的绝对值的最小值。 注意是二叉搜索树,二叉搜索树可是有序的。 遇到在二叉搜索树上求什么最值啊,差值之类的,就把它想成在一个有序数组上求最值,求差值,这
代码随想录算法Day20 | 654.最大二叉树 , 617.合并二叉树 , 700.二叉搜索树中的搜索 , 98.验证二叉搜索树
摘要:654.最大二叉树 题目链接:654. 最大二叉树 - 力扣(LeetCode) 题目 给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建: 创建一个根节点,其值为 nums 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右
代码随想录算法Day15 | 102.二叉树层序遍历,226.翻转二叉树,101.对称二叉树
摘要:102.二叉树层序遍历 题目链接:102. 二叉树的层序遍历 - 力扣(LeetCode) 题目 给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。 示例 1: 输入:root = [3,9,20,null,null,15,7] 输出:[[3],[9,
代码随想录算法Day14 | 理论基础,递归遍历,迭代遍历,统一迭代
摘要:理论基础 1、二叉树的种类 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 这棵二叉树为满二叉树,也可以说深度为k,有2^k-1个节点的二叉树。 完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下
代码随想录算法Day13 | 239. 滑动窗口最大值,347.前 K 个高频元素
摘要:239. 滑动窗口最大值 题目链接:239. 滑动窗口最大值 - 力扣(LeetCode) 题目 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1:
代码随想录算法Day11 | 20. 有效的括号,1047. 删除字符串中的所有相邻重复项,逆波兰表达式(后缀表达式)求值
摘要:20. 有效的括号 题目链接: 20. 有效的括号 - 力扣(LeetCode) 题目 给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。 有效字符串需满足: 左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。每个右括号都有一个对应的相同
代码随想录算法Day10 | 理论基础 232.用栈实现队列 225. 用队列实现栈
摘要:理论基础 栈是后进先出,队列是先进先出。如图所示。 232.用栈实现队列 题目链接:232. 用栈实现队列 - 力扣(LeetCode) 题目 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty): 实现 MyQueue 类: void pu
代码随想录算法训练营Day08 | 344.反转字符串,541. 反转字符串II, 剑指Offer 05.替换空格 ,151.翻转字符串里的单词 ,剑指Offer58-II.左旋转字符串
摘要:344.反转字符串 题目链接:344. 反转字符串 - 力扣(LeetCode) 题目 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例 1: 输入:s = [
代码随想录算法训练营Day07 | 454.四数相加II ,383. 赎金信 ,15. 三数之和 ,18. 四数之和
摘要:454.四数相加II 题目链接: 454. 四数相加 II - 力扣(LeetCode) 题目 给你四个整数数组 nums1、nums2、nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足: 0 <= i, j, k, l < n nums1[i
代码随想录算法训练营Day06 | 哈希表理论基础242.有效的字母异位词 ,349. 两个数组的交集 , 202. 快乐数 ,1. 两数之和
摘要:哈希表理论基础 参考: 代码随想录 (programmercarl.com) 242.有效的字母异位词 题目链接: 242. 有效的字母异位词 - 力扣(LeetCode) 题目 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。 注意:若 s 和 t 中每个字符出现的