fFee-ops's Blog
03
06
剑指 Offer 43. 1~n 整数中 1 出现的次数 剑指 Offer 43. 1~n 整数中 1 出现的次数
剑指 Offer 43. 1~n 整数中 1 出现的次数 解题思路 代码 解题思路将 1 ~ n 的个位、十位、百位、…的 1 出现次数相加,即为 1 出现的总次数。某位中 1出现次数的计算方法: 当 cur = 0时: 此位 1
2021-03-06
06
剑指 Offer 42. 连续子数组的最大和 剑指 Offer 42. 连续子数组的最大和
剑指 Offer 42. 连续子数组的最大和 解题思路 代码 解题思路最基本的动态规划题目,只要找准dp[i]的含义,那就十分简单 代码class Solution { public int maxSubArray(int[]
2021-03-06
06
剑指 Offer 41. 数据流中的中位数 剑指 Offer 41. 数据流中的中位数
剑指 Offer 41. 数据流中的中位数 解题思路 代码 解题思路这题用小顶堆+大顶堆来做。维护一个小顶堆,用来存放数组中较大的那一部分,维护一大顶堆,用来存放数组中较小的一部分。要始终保持小顶堆的最小值大于等于大顶堆的最大值。也就
2021-03-06
06
剑指 Offer 40. 最小的k个数 剑指 Offer 40. 最小的k个数
剑指 Offer 40. 最小的k个数 解题思路 代码 解题思路思路一:注意找前 K 大/前 K 小问题不需要对整个数组进行 O(NlogN)O(NlogN) 的排序!例如本题,直接通过快排切分排好第 K 小的数(下标为 K-1),那
2021-03-06
06
剑指 Offer 39. 数组中出现次数超过一半的数字 剑指 Offer 39. 数组中出现次数超过一半的数字
剑指 Offer 39. 数组中出现次数超过一半的数字 解题思路 代码 解题思路这题有两个方法; 方法一:正常思路可以先排序,再取中间值,中间值就是数组中出现次数超过一半的数字。因为一个元素占数组的一半以上,那肯定能到达中间位置。
2021-03-06
06
剑指 Offer 38. 字符串的排列 剑指 Offer 38. 字符串的排列
剑指 Offer 38. 字符串的排列 解题思路 代码 解题思路这道题其实就是字符上的全排列问题,使用回溯算法就可以完成。 代码class Solution { public String[] permutation(Stri
2021-03-06
05
剑指 Offer 35. 复杂链表的复制 剑指 Offer 35. 复杂链表的复制
剑指 Offer 35. 复杂链表的复制 解题思路 代码 解题思路利用哈希表的查询特点,考虑构建 原链表节点 和 新链表对应节点 的键值对映射关系,再遍历构建新链表各节点的 next 和 random 引用指向即可。 代码/* //
2021-03-05
05
剑指 Offer 34. 二叉树中和为某一值的路径 剑指 Offer 34. 二叉树中和为某一值的路径
剑指 Offer 34. 二叉树中和为某一值的路径 解题思路 代码 解题思路本题使用回溯法。主要思路是从根结点出发,用sum减去根节点的值,到达叶子节点后如果二者的差为0,证明本条路径满足要求。然后就是套回溯模板了 代码class S
2021-03-05
05
剑指 Offer 33. 二叉搜索树的后序遍历序列 剑指 Offer 33. 二叉搜索树的后序遍历序列
剑指 Offer 33. 二叉搜索树的后序遍历序列 解题思路 代码 解题思路先来看一个二叉树的后序遍历:[3,5,4,10,12,9]。 后续遍历的最后一个数字一定是根节点,所以数组中最后一个数字9就是根节点 我们从前往后找到第一个
2021-03-05
05
剑指 Offer 32 - III. 从上到下打印二叉树 III 剑指 Offer 32 - III. 从上到下打印二叉树 III
剑指 Offer 32 - III. 从上到下打印二叉树 III 解题思路 代码 解题思路和前面两个上到下打印二叉树一样,不过有个特点,要按照z字形打印每一层的元素,其实总结一下就是奇数层正序打印,偶数层倒序打印,要实现这个功能很简单
2021-03-05
05
05
14 / 26