剑指offer
文章平均质量分 93
Java技术一点通
本人计算机软件工程专业在读,擅长于Java后端开发,有多个项目开发经验,业余丰富各种技术栈,大学期间参与软件研发中心研究。荣获2023年CSDN博客之星、CSDN城市之星、阿里云社区专家博主、华为云享专家,致力于新技术的推广与优秀作品的普及。
展开
-
《剑指offer》题解——week7
滑动窗口对应的数据结构为 双端队列 ,本题使用 单调队列 即可解决本问题。遍历数组时,每轮保证单调队列 dequedequedeque :算法流程: 根据题意,此 5 张牌是顺子的 条件 如下:算法流程: 假设有一圈数字 [0,1,2,3,4],m=3[0, 1, 2, 3, 4],m = 3[0,1,2,3,4],m=3我们每次将删除元素的后一个元素放在最前面方便计数:第四轮反推,补上 mmm 个位置,然后模上当时的数组大小 2,位置是 。第三轮反推,补上 mmm 个位置,然后模上当时的原创 2022-08-30 10:22:17 · 3072 阅读 · 17 评论 -
《剑指offer》题解——week6(持续更新)
排序数组中的搜索问题,首先想到 二分法 解决。假设我们缺失的元素数值为 $x$,那么对于 $x$ 左边的元素(若有)必然是完整且连续的,也就是其必然满足 $nums[i] = i$,而其右边的元素(若有)必然由于 x 的缺失,导致必然不满足 $nums[i] = i$,因此在以缺失元素为分割点的数轴上,具有**二段性**,我们可以使用原创 2022-08-21 02:32:04 · 4455 阅读 · 0 评论 -
《剑指offer》题解——week5(持续更新)
动态规划:状态定义:设动态规划列表dp,dp[i]表示以 x_i为结尾的数字的翻译方案数量。2. 转移方程:*若$x_i$ 和 $x_{i - 1}$ 组成的两位数字可以被翻译,则`dp[i] = dp[i - 1] + dp[i - 2]`;否则`dp[i] = dp[i - 1]`。>可被翻译的两位数的区间:当 $x_{i - 1} = 0$时,组成的两位数是无法被翻译的(例如00,01,……),因此区间为 $[10, 25]$。原创 2022-08-19 09:04:48 · 2930 阅读 · 0 评论 -
《剑指offer》题解——week4(持续更新)
二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树:递归解析:终止条件: 当,说明此子树节点数量 ⩽\leqslant⩽ 1 ,无需判别正确性,因此直接返回 ;递推过程:划分左右子树: 遍历给定数组的区间元素,寻找第一个大于根节点的结点,记索引为。此时,可划分出左子树区间为、右子树区间为、根节点索引为。判断是否为二叉搜索树:返回值: 所有子树都需正确才判定为正确的二叉搜索树的后序遍历。因此使用 与逻辑符 && 连接。 做法是使用 ,在 过程中记录路径以及路径对应的元素和,当出现元素原创 2022-08-17 12:48:52 · 3450 阅读 · 3 评论 -
《剑指offer》题解——week3(持续更新)
1. 首先判断两个二叉树为空的情况,如果为空,直接`return false`;2. 如果不为空,就可以调用`isSame(A, B)`函数来判断B是否为A的子树。如果不是,则递归,判断B是否是A的左子树的子树,或者,B是否是A的右子树的子树。注意是`||`3. 对于函数`isSame(A, B)`的细节。首先判断B子树的节点是否为空,如果为空,说明前面的都匹配,直接`return true`;4. 接下来,如果B树的节点不为空,但是A树的节点为空,那么一定不匹配,直接`return false`;原创 2022-08-11 03:48:30 · 5967 阅读 · 1 评论 -
《剑指offer》题解——week2(持续更新)
由于需要对结果进行取余,导致`不能使用动态规划`,因为取模导致了dp的运算出现了问题。dp是通过最优子问题来计算出最终结果的,而取模之后就导致计算最优子问题出现了问题,计算出来的`dp[i-j]*j`表面上可能是最大的,但是`dp[i-j]`也是经过取模运算的,从而这会导致`dp[i]`不是由前面的最优子问题推出来的。原创 2022-08-10 13:31:57 · 4499 阅读 · 1 评论 -
《剑指offer》题解——week1(持续更新)
思路:定义一个哈希表,遍历一次数组,利用哈希表对每个元素进行标记。若当前元素被标记过了,则该元素重复。**时间复杂度:**`O(n)`**方法二:原地交换**主要思想是把每个数放到对应的位置上,即让 `nums[i] = i`。前往后遍历数组中的所有数,假设当前遍历到的数是 `nums[i]=x`,那么:- 如果`x != i && nums[x] == x`,则说明 `x`出现了多次,直接返回 `x`即可;- 如果`nums[x] != x`,那我们就把 `x` 交换原创 2022-08-08 12:47:25 · 3661 阅读 · 0 评论