02 2023 档案
代码随想录算法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
代码随想录算法Day24 | 回溯算法理论基础,77.组合
摘要:回溯算法理论基础 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯法通常使用递归来实现,在递归过程中不断尝试各种可能的解决方案,如果发现当前的解决方案不可行,就回溯到上一步,换一种方案继续尝试。 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝的操作
代码随想录算法Day09 | kmp算法理论基础知识,28. 实现 strStr() ,459.重复的子字符串
摘要:kmp算法理论基础知识 核心思想 利用已经部分匹配的结果而加快模式串的滑动速度! 且主串S的指针i不必回溯!相较于BF算法的O(N * M),KMP算法时间复杂度可提速到O(N + M)! 用处 KMP主要应用在字符串匹配上。 KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本
代码随想录算法Day23 | 669. 修剪二叉搜索树 ,108.将有序数组转换为二叉搜索树 , 538.把二叉搜索树转换为累加树 , 总结篇
摘要:669. 修剪二叉搜索树 题目链接:669. 修剪二叉搜索树 - 力扣(LeetCode) 思路 在 删除二叉搜索树中节点值为key的节点 这一题中,分五种情况来考虑,找到节点后删除即可。 而这道题是要求删除所有不在[low, high]之间的节点。 最简单的方法,遍历所有节点,如果不在low, h
代码随想录算法Day17 | 110.平衡二叉树 , 257. 二叉树的所有路径 , 404.左叶子之和
摘要:110.平衡二叉树 题目链接:110. 平衡二叉树 - 力扣(LeetCode) 题目 给定一个二叉树,判断它是否是高度平衡的二叉树。 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1 。 示例 1: 输入:root = [3,9,20,null,nu
代码随想录算法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 中的最大值。递归地在最大值 左边 的 子数组前缀上 构建左子树。递归地在最大值 右
代码随想录算法Day18 | 513.找树左下角的值 , 112. 路径总和 ,113.路径总和ii , 106.从中序与后序遍历序列构造二叉树 , 105.从前序与中序遍历序列构造二叉树
摘要:513.找树左下角的值 题目链接:513. 找树左下角的值 - 力扣(LeetCode) 题目 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root = [2,1,3] 输出: 1 示例 2: 输入: [1,2,
代码随想录算法Day16 | 104.二叉树的最大深度 ,559.n叉树的最大深度 , 111.二叉树的最小深度 , 222.完全二叉树的节点个数
摘要:104.二叉树的最大深度 题目链接 : 104. 二叉树的最大深度 - 力扣(LeetCode) 题目 给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例:给定二叉树 [3,9,20,null,null,15,7]
代码随想录算法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 中每个字符出现的
代码随想录算法Day05| 24. 两两交换链表中的节点 19.删除链表的倒数第N个节点 面试题 02.07. 链表相交 142.环形链表II
摘要:24. 两两交换链表中的节点 题目链接: 24. 两两交换链表中的节点 - 力扣(LeetCode) 题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head = [1,2,3,4] 输出:
代码随想录算法Day03| 链表理论基础 203.移除链表元素 707.设计链表 206.反转链表
摘要:链表理论基础 链表分为 单链表 ,双链表,循坏链表。 链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。 链表的长度可以是不固定的,并且可以动态增删, 适合数据量不固定,频繁增删,较少查询的场景。 203.移除链表元素 题目链接: 203. 移除
代码随想录算法Day02| 977.有序数组的平方 ,209.长度最小的子数组 ,59.螺旋矩阵II
摘要:977.有序数组的平方 题目链接:977. 有序数组的平方 - 力扣(LeetCode) 题目 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,
代码随想录算法Day01| 数组理论基础, 704.二分查找 27.移除元素
摘要:数组理论基础 数组下标都是从0开始的。 数组内存空间的地址是连续的。(正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。) 704. 二分查找 题目链接:704. 二分查找 - 力扣(LeetCode) 题目 给定一个 n 个元素有序的(升序)整型