07.03 第 075 ~ 087 题(第 09 ~ 12 天) 07.03 第 075 ~ 087 题(第 09 ~ 12 天)二叉树的完全性检验分析如果当前节点不为空,且左子树为空,右子树不为空,则返回false。否则递归判断左右子树是否是完全二叉树。这种思路是错误的,因为如果左子树是完全二叉树,但是没有右子树,而右子树不为空,这棵树也不是完全二叉树。 使用广度优先搜索,即层序遍历实现。用一个bool变量标记是否出现过空节点,一旦出现过空节点,再出现非空节点 2024-11-10 算法笔记 > 面试篇 #leetcode-notes
07.02 第 073 ~ 074 题( 第 05 ~ 08 天) 07.02 第 073 ~ 074 题( 第 05 ~ 08 天)路径总和分析深度优先遍历: 如果当前节点为空,返回false。 否则更新targetSum -= root->val; 当前节点是叶子节点,如果targetSum == 0,返回true,否则返回false。 递归左子树或右子树。 1234567891011121314151617181920212223242526272 2024-11-06 算法笔记 > 面试篇 #leetcode-notes
07.01 第 051 ~ 072 题(第 01 ~ 04 天) 07.01 第 051 ~ 072 题(第 01 ~ 04 天)无重复字符的最长子串分析使用哈希表+滑动窗口。如果当前字符没有在哈希表中出现过,就将其加入哈希表,右指针继续向右,right-left+1是当前长度,不断更新最大长度;否则不断向右滑动左窗口,直至遇到哈希表内没有当前元素,再把当前元素加入哈希表。 12345678910111213141516171819202122232425262 2024-11-01 算法笔记 > 面试篇 #leetcode-notes
06.04 第 038 ~ 050 题(第 13 ~ 16 天) 06.04 第 038 ~ 050 题(第 13 ~ 16 天)两数相加分析1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950/** * Definition for singly-linked list. * struct ListNode { * 2024-10-28 算法笔记 > 面试篇 #leetcode-notes
0603练习题目 06.03 第 026 ~ 037 题(第 09 ~ 12 天)反转链表迭代使用两个指针 cur 和 pre 进行迭代。pre 指向 cur 前一个节点位置。初始时,pre 指向 None,cur 指向 head。不断让cur->next指向pre,pre右移,cur右移。 123456789101112131415161718192021222324/** * Definition for 2024-10-23 算法笔记 > 面试篇 #leetcode-notes
0602练习题目 06.02第 013 ~ 025 题(第 05 ~ 08 天)搜索旋转排序数组分析把数组看成左右两部分,左边部分一定比右半部分值大。 如果nums[mid] == target,直接返回下标。 如果nums[mid] >= nums[left],说明mid在左半部分,此时: nums[mid] > target && target >= nums[left],t 2024-10-18 算法笔记 > 面试篇 #leetcode-notes
0601练习题目 06.01第 001 ~ 012 题(第 01 ~ 04 天)螺旋矩阵分析对矩阵进行模拟,每次更新边界位置,初始时向右走,当i == right,开始调整方向向下走,此时对i进行枚举,当i == down,调整方向向左走,枚举j,当i == left,调整方向向上走,对i进行枚举,当i == up,再次向右走。 1234567891011121314151617181920212223242526 2024-10-14 算法笔记 > 面试篇 #leetcode-notes
0504区间DP和树形DP 05.04 区间DP和树形DP 区间动态规划:线性 DP 的一种,简称为「区间 DP」。以「区间长度」划分阶段,以两个坐标(区间的左、右端点)作为状态的维度。一个状态通常由被它包含且比它更小的区间状态转移而来。 区间 DP 的主要思想就是:先在小区间内得到最优解,再利用小区间的最优解合并,从而得到大区间的最优解,最终得到整个区间的最优解。 根据小区间向大区间转移情况的不同,常见的区间 DP 问题可 2024-10-05 算法笔记 > 动态规划 #leetcode-notes
0503背包问题 05.03 背包问题滚动数组优化: $dp[w] = \begin{cases} dp[w] & w < weight[i - 1] \cr max \lbrace dp[w], dp[w - weight[i - 1]] + value[i - 1] \rbrace & w \ge weight[i - 1] \end{cases}$ 分割等和子集分析先把数组的和 2024-09-29 算法笔记 > 动态规划 #leetcode-notes
0502线性动态规划 单串线性 DP 问题 如果状态包含多个维度,但是每个维度上都是线性划分的阶段,也属于线性 DP。比如背包问题、区间 DP、数位 DP 等都属于线性 DP。 线性 DP 问题的划分方法有多种方式。 如果按照「状态的维度数」进行分类,我们可以将线性 DP 问题分为:一维线性 DP 问题、二维线性 DP 问题,以及多维线性 DP 问题。如果按照「问题的输入格式」进行分类,我们可以将线性 DP 问题分为: 2024-09-26 算法笔记 > 动态规划 #leetcode-notes